Skip to content

Commit adfd87b

Browse files
committed
Rename to pulldash
1 parent 7e02974 commit adfd87b

File tree

11 files changed

+77
-27
lines changed

11 files changed

+77
-27
lines changed

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
# pullpal
1+
# pulldash
22

33
A lightning-fast UI to review pull requests on GitHub.
44

build.ts

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ import { $ } from "bun";
22

33
// Build the CLI binary
44
const result = await Bun.build({
5-
entrypoints: ["./bin/pullpal.ts"],
5+
entrypoints: ["./bin/pulldash.ts"],
66
outdir: "./dist",
77
target: "bun",
88
minify: true,
@@ -18,9 +18,9 @@ if (!result.success) {
1818
}
1919

2020
// Make the binary executable
21-
await $`chmod +x ./dist/pullpal.js`;
21+
await $`chmod +x ./dist/pulldash.js`;
2222

23-
// Rename to just 'pullpal' for cleaner bin usage
24-
await $`mv ./dist/pullpal.js ./dist/pullpal`;
23+
// Rename to just 'pulldash' for cleaner bin usage
24+
await $`mv ./dist/pulldash.js ./dist/pulldash`;
2525

26-
console.log("✅ Build complete: ./dist/pullpal");
26+
console.log("✅ Build complete: ./dist/pulldash");

bun.lock

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
"configVersion": 1,
44
"workspaces": {
55
"": {
6-
"name": "pullpal",
6+
"name": "pulldash",
77
"devDependencies": {
88
"@electron/asar": "^4.0.1",
99
"@hono/node-server": "^1.19.6",
@@ -1261,8 +1261,6 @@
12611261

12621262
"app-builder-lib/@electron/asar": ["@electron/asar@3.2.18", "", { "dependencies": { "commander": "^5.0.0", "glob": "^7.1.6", "minimatch": "^3.0.4" }, "bin": { "asar": "bin/asar.js" } }, "sha512-2XyvMe3N3Nrs8cV39IKELRHTYUWFKrmqqSY1U+GMlc0jvqjIVnoxhNd2H4JolWQncbJi1DCvb5TNxZuI2fEjWg=="],
12631263

1264-
"bun-types/@types/node": ["@types/node@20.19.25", "", { "dependencies": { "undici-types": "~6.21.0" } }, "sha512-ZsJzA5thDQMSQO788d7IocwwQbI8B5OPzmqNvpf3NY/+MHDAS759Wo0gd2WQeXYt5AAAQjzcrTVC6SKCuYgoCQ=="],
1265-
12661264
"cacache/glob": ["glob@8.1.0", "", { "dependencies": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", "inherits": "2", "minimatch": "^5.0.1", "once": "^1.3.0" } }, "sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ=="],
12671265

12681266
"cacache/lru-cache": ["lru-cache@7.18.3", "", {}, "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA=="],

electron-builder.json

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
{
22
"$schema": "https://raw.githubusercontent.com/electron-userland/electron-builder/master/packages/app-builder-lib/scheme.json",
3-
"appId": "com.coder.pullpal",
4-
"productName": "Pullpal",
3+
"appId": "com.coder.pulldash",
4+
"productName": "Pulldash",
55
"copyright": "Copyright © 2025 Coder",
66

77
"directories": {
@@ -83,7 +83,7 @@
8383
"installerHeaderIcon": "build/icon.ico",
8484
"createDesktopShortcut": true,
8585
"createStartMenuShortcut": true,
86-
"shortcutName": "Pullpal"
86+
"shortcutName": "Pulldash"
8787
},
8888

8989
"linux": {
@@ -106,7 +106,7 @@
106106
"publish": {
107107
"provider": "github",
108108
"owner": "coder",
109-
"repo": "pullpal",
109+
"repo": "pulldash",
110110
"releaseType": "release"
111111
}
112112
}

package.json

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,10 @@
11
{
2-
"name": "pullpal",
2+
"name": "pulldash",
33
"version": "0.0.1",
44
"description": "A fast, local PR review dashboard",
55
"type": "module",
66
"bin": {
7-
"pullpal": "./dist/pullpal"
7+
"pulldash": "./dist/pulldash"
88
},
99
"files": [
1010
"dist"

scripts/build-electron.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ const DIST_DIR = join(ROOT_DIR, "dist");
2121
const ELECTRON_DIST = join(DIST_DIR, "electron");
2222

2323
async function build() {
24-
console.log("🔨 Building PullPal Electron App\n");
24+
console.log("🔨 Building Pulldash Electron App\n");
2525

2626
// Step 1: Build browser bundle
2727
console.log("📦 Step 1: Building browser bundle...");

scripts/electron-dev.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -72,7 +72,7 @@ function launchElectron(): void {
7272
}
7373

7474
async function main() {
75-
console.log("🚀 Starting PullPal Electron Dev Mode\n");
75+
console.log("🚀 Starting Pulldash Electron Dev Mode\n");
7676

7777
// Initial compilation
7878
const success = await compileMain();

scripts/generate-icons.ts

Lines changed: 58 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
/**
22
* Generate app icons from the SVG logo for all platforms
33
*
4-
* - macOS: icon.icns (multiple sizes bundled)
4+
* - macOS: icon.icns (multiple sizes bundled, with ~10% padding per Apple HIG)
55
* - Windows: icon.ico (multiple sizes bundled)
66
* - Linux: icon.png (256x256)
77
*/
@@ -18,6 +18,50 @@ const LOGO_PATH = join(ROOT_DIR, "src", "browser", "logo.svg");
1818
// Icon sizes needed for each platform
1919
const ICON_SIZES = [16, 32, 48, 64, 128, 256, 512, 1024];
2020

21+
// macOS icons need padding around the icon to match Apple HIG
22+
// Standard macOS icons have ~10% padding on each side (icon fills ~80% of canvas)
23+
const MACOS_ICON_SCALE = 0.8;
24+
25+
/**
26+
* Generate a PNG with padding for macOS icons
27+
* macOS desktop icons (Finder, Dock, etc.) have standard padding/safe zone
28+
*/
29+
async function generateMacOSIcon(
30+
svgBuffer: Buffer,
31+
size: number
32+
): Promise<Buffer> {
33+
const iconSize = Math.round(size * MACOS_ICON_SCALE);
34+
const padding = Math.round((size - iconSize) / 2);
35+
36+
// First resize the SVG to the smaller icon size
37+
const resizedIcon = await sharp(svgBuffer)
38+
.resize(iconSize, iconSize, {
39+
fit: "contain",
40+
background: { r: 0, g: 0, b: 0, alpha: 0 },
41+
})
42+
.png()
43+
.toBuffer();
44+
45+
// Then composite onto a transparent canvas with padding
46+
return sharp({
47+
create: {
48+
width: size,
49+
height: size,
50+
channels: 4,
51+
background: { r: 0, g: 0, b: 0, alpha: 0 },
52+
},
53+
})
54+
.composite([
55+
{
56+
input: resizedIcon,
57+
left: padding,
58+
top: padding,
59+
},
60+
])
61+
.png()
62+
.toBuffer();
63+
}
64+
2165
async function generateIcons() {
2266
console.log("📦 Generating app icons from SVG...\n");
2367

@@ -29,7 +73,7 @@ async function generateIcons() {
2973
// Read and convert SVG to high-res PNG first
3074
const svgBuffer = readFileSync(LOGO_PATH);
3175

32-
// Generate PNGs at various sizes
76+
// Generate PNGs at various sizes (for Windows/Linux - no padding)
3377
const pngBuffers: Map<number, Buffer> = new Map();
3478

3579
for (const size of ICON_SIZES) {
@@ -44,6 +88,14 @@ async function generateIcons() {
4488
pngBuffers.set(size, buffer);
4589
}
4690

91+
// Generate macOS-specific icons with padding
92+
const macPngBuffers: Map<number, Buffer> = new Map();
93+
for (const size of ICON_SIZES) {
94+
console.log(` Generating ${size}x${size} macOS PNG (with padding)...`);
95+
const buffer = await generateMacOSIcon(svgBuffer, size);
96+
macPngBuffers.set(size, buffer);
97+
}
98+
4799
// Save the main 256x256 PNG for Linux and general use
48100
const png256 = pngBuffers.get(256)!;
49101
writeFileSync(join(BUILD_DIR, "icon.png"), png256);
@@ -53,11 +105,11 @@ async function generateIcons() {
53105
const png512 = pngBuffers.get(512)!;
54106
writeFileSync(join(BUILD_DIR, "icon@2x.png"), png512);
55107

56-
// Generate macOS .icns
57-
console.log("\n Generating macOS icon.icns...");
108+
// Generate macOS .icns (using padded icons for proper macOS appearance)
109+
console.log("\n Generating macOS icon.icns (with padding)...");
58110
try {
59-
// Use 1024x1024 as the source for best quality
60-
const png1024 = pngBuffers.get(1024)!;
111+
// Use 1024x1024 padded version as the source for best quality
112+
const png1024 = macPngBuffers.get(1024)!;
61113
const icns = png2icons.createICNS(png1024, png2icons.BICUBIC2, 0);
62114
if (icns) {
63115
writeFileSync(join(BUILD_DIR, "icon.icns"), icns);

src/browser/components/home.tsx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -50,13 +50,13 @@ export function Home() {
5050
<div className="absolute inset-0 bg-[#408AC3]/20 rounded-3xl blur-xl group-hover:bg-[#408AC3]/30 transition-colors duration-500" />
5151
<img
5252
src={logoUrl}
53-
alt="PullPal"
53+
alt="Pulldash"
5454
className="relative w-24 h-24 drop-shadow-2xl transition-transform duration-300 group-hover:scale-105"
5555
/>
5656
</div>
5757
<div className="text-center space-y-2">
5858
<h1 className="text-4xl font-bold tracking-tight bg-gradient-to-r from-white via-white to-[#9ED8F7] bg-clip-text text-transparent">
59-
PullPal
59+
Pulldash
6060
</h1>
6161
<p className="text-muted-foreground text-sm">
6262
Lightning-fast GitHub PR reviews

src/browser/index.html

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
<meta charset="UTF-8" />
55
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
66

7-
<title>PullPal - Fast GitHub PR Reviews</title>
7+
<title>Pulldash - Fast GitHub PR Reviews</title>
88
<meta
99
name="description"
1010
content="A lightning-fast, local PR review dashboard with syntax highlighting."

0 commit comments

Comments
 (0)