| .forgejo/workflows | ||
| .opencode | ||
| src | ||
| static | ||
| .editorconfig | ||
| .gitignore | ||
| .npmrc | ||
| .prettierignore | ||
| .prettierrc | ||
| AGENTS.md | ||
| eslint.config.js | ||
| mise.toml | ||
| netlify.toml | ||
| package.json | ||
| pnpm-lock.yaml | ||
| pnpm-workspace.yaml | ||
| postcss.config.js | ||
| README.md | ||
| skills-lock.json | ||
| svelte.config.js | ||
| tailwind.config.ts | ||
| tsconfig.json | ||
| vite.config.ts | ||
benjaminpalko.ca
Personal website and blog for Benjamin Palko, built with SvelteKit and deployed on Netlify.
Stack
- SvelteKit 5 / Svelte 5
- TypeScript (strict)
- Tailwind CSS 4 + daisyUI
- mdsvex markdown for blog posts
- pino (server-side logging)
@lucide/svelteicons
Prerequisites
- mise (or Node + the pnpm version pinned in
mise.toml)
Setup
pnpm install
Development
pnpm dev # start dev server
pnpm dev --open # start dev server and open the app in a browser
Scripts
| Command | What it does |
|---|---|
pnpm dev |
Start dev server |
pnpm build |
Production build |
pnpm preview |
Preview the production build |
pnpm check |
svelte-kit sync + svelte-check (typecheck) |
pnpm lint |
Prettier check + ESLint |
pnpm format |
Prettier write |
pnpm test:unit |
Vitest (watch mode) |
pnpm test |
Vitest (single run) |
Blog
Posts live at src/lib/posts/*.md as mdsvex markdown. Follow src/lib/posts/template.md.sample for frontmatter (title, description, image, date, categories, published). Categories are one of development, work, life. The slug is the filename; only posts with published: true appear on the site.
See AGENTS.md for the full authoring workflow.
Deployment
The site deploys to Netlify on every push to main via a Forgejo Actions workflow (.forgejo/workflows/deploy.yml): it installs with pnpm, runs pnpm build, and deploys the build/ directory with netlify-cli. Requires NETLIFY_AUTH_TOKEN and NETLIFY_SITE_ID configured as repository secrets in Forgejo. Netlify's GitHub-app continuous deployment is disabled.
The GitHub Actions PR gate (.github/workflows/pr.yml) runs on the GitHub mirror on every pull request using pnpm. Before shipping, verify locally with:
pnpm lint && pnpm check && pnpm test && pnpm build