A minimal, terminal-flavored personal portfolio — grayscale, monospace, and quietly animated.
Built with SvelteKit and Svelte 5 runes. Home to a live GitHub contribution calendar, a Markdown-powered writing space, and a guest book you can sign in to with GitHub.
| Daily — GitHub contribution calendar | Words — guest book |
|---|---|
![]() |
![]() |
- Home — an animated, scrolling tab title over a soft grayscale backdrop.
- Daily — a GitHub contribution heatmap recolored to the site's grayscale palette (via the GitHub GraphQL API).
- Articles — Markdown writing rendered with
mdsvex, syntax-highlighted by Shiki, with a candle/flame empty-state while the ink is still drying. - Words — a guest book: sign in with GitHub, leave a message, like others, delete your own.
- About — a short, reflective page.
- SSR + prerendering, dynamic
robots.txtandsitemap.xml, OpenGraph/Twitter meta, and haptic feedback.
| Area | Tools |
|---|---|
| Framework | SvelteKit 2 · Svelte 5 (runes) · Vite 7 |
| Language | TypeScript |
| Styling | Tailwind CSS v4 · @tailwindcss/typography · JetBrains Mono |
| Content | mdsvex · Shiki · rehype-slug · remark-toc |
| Data | PostgreSQL · Drizzle ORM |
| Auth | Arctic — GitHub OAuth |
| UX | web-haptics |
| Tooling | ESLint · Prettier · Drizzle Kit |
| Hosting | Vercel (@sveltejs/adapter-vercel) |
- Node.js 20.19+ or 22.12+ (required by Vite 7)
- pnpm —
npm install -g pnpm - A PostgreSQL database (local, or a free one from Neon / Supabase)
# 1. Install dependencies
pnpm install
# 2. Configure environment
cp .env.example .env
# then fill in the values (see the table below)
# 3. Create the database tables
pnpm db:push
# 4. Start the dev server
pnpm devThe site runs at http://localhost:5173.
| Variable | Required for | How to get it |
|---|---|---|
DATABASE_URL |
Guest book | Any PostgreSQL connection string |
GITHUB_CLIENT_ID |
Guest book sign-in | GitHub → Settings → Developer settings → OAuth Apps |
GITHUB_CLIENT_SECRET |
Guest book sign-in | Same OAuth App |
GITHUB_TOKEN |
Contribution calendar | A Personal Access Token with the read:user scope |
BASE_URL |
robots / sitemap / OAuth redirect | http://localhost:5173 in dev, https://redreammer.blog in production |
For the OAuth App, set the callback URL to
{BASE_URL}/api/auth/callback..envis already gitignored — never commit it.
| Command | What it does |
|---|---|
pnpm dev |
Start the dev server |
pnpm build |
Production build |
pnpm preview |
Preview the production build |
pnpm check |
Type-check with svelte-check |
pnpm lint |
Prettier check + ESLint |
pnpm format |
Format with Prettier |
pnpm db:push |
Push the Drizzle schema to the database |
pnpm db:migrate |
Run migrations |
pnpm db:studio |
Open Drizzle Studio |
Deployed on Vercel via @sveltejs/adapter-vercel. Import the repo in Vercel
and set the same environment variables in the project settings. Point BASE_URL
at your production domain so robots.txt, sitemap.xml, and the OAuth redirect
resolve correctly.
- X / Twitter: @Recoordinates
- GitHub: @latent-9


