A terminal-native personal site with a journal, bilingual Arabic surfaces, a lab bench, and useful no-login tools.
Write in Obsidian, VS Code, Vim, or any editor. Push markdown to GitHub. The site updates. No database, no CMS, no duplicated writing workflow.
The current release keeps the terminal vibe, but makes the site more useful and shareable:
- Full Arabic route set:
/ar,/ar/blog,/ar/about,/ar/contact,/ar/lab,/ar/tools, and/ar/card. - Thmanyah Arabic typography for Arabic UI and reading surfaces, while terminal commands stay in English.
- Journal digest cards for skim-first readers: the point, key ideas, useful jumps, and a three-word memory hook.
- Lab bench for public experiments, kept separate from formal portfolio case studies.
- Everyday tools: bill splitter, short links, QR codes, WhatsApp links, calendar files, image shrinking, and share-card generation.
- Digital card improvements: vCard, QR, WhatsApp, LinkedIn, wallet pass support, and share-card attribution.
- Vercel is the default theme, with the theme picker and
themeterminal command still available.
No local setup required. Click, paste, deploy.
| Step | Action | Time |
|---|---|---|
| 1 | Click Deploy with Vercel below. It forks the repo and creates your project. | 30s |
| 2 | Add the email env variables from resend.com if you want newsletter support. | 90s |
| 3 | Click Deploy. Your site is live. | 60s |
After deploy, edit content/site.ts, content/card.md, content/locale.ts, and content/lab.ts to make the site yours. Posts live in content/posts/*.md.
- Three reading themes: Terminal, Light, and Sepia.
- Adjustable font size, spacing, focus mode, progress bar, and table of contents.
- Markdown posts with GFM, code highlighting, headings, links, images, and tables.
- Digest cards for readers who want the idea before the full article.
- RTL-aware Arabic surfaces using the local Thmanyah font files.
- Giscus comments through GitHub Discussions, with a safe fallback when not configured.
The home terminal is a real command parser with 28 commands.
| Group | Commands |
|---|---|
| Navigation | about, blog, lab, tools, card, contact |
| Public tools | split, short, qr, wa, event, image, sharecard |
| Identity | whoami, skills, theme, dashboard, clear |
| Text utilities | json, base64, wordcount, uuid, epoch |
| Play and maps | type, stars, map, snake, pokedex |
The default theme is vercel; visitors can switch themes from the nav dropdown or by typing theme.
The lab is intentionally not a polished project/case-study section. It is a place for experiments, prototypes, and public traces of how ideas get tested.
Configured experiments currently include:
wa1939/termfoliowa1939/atharwa1939/arabic-pdf-suitewa1939/wafiwa1939/Arabic-OCRwa1939/ArabicWordCloudGenerator
The tools are meant to give people a practical reason to come back without creating accounts or uploading data unnecessarily.
- Bill splitter with service charge, tax, payers, portions, and a copyable group message.
- Short link maker using a no-login external shortener.
- QR generator.
- WhatsApp click-to-chat link builder.
- Calendar
.icsfile generator. - Browser-side image shrinker.
- Share-card maker with site attribution.
Most identity, navigation, resume, and social data is controlled from:
content/site.ts
content/locale.ts
content/card.md
content/lab.tscontent/site.ts is the main English source. content/locale.ts contains Arabic UI copy and Arabic resume content. content/card.md powers the digital card and vCard. content/lab.ts powers the lab and tools listings.
Create .md files in content/posts/:
---
title: "My First Post"
date: "2026-01-15"
excerpt: "A brief description for cards and SEO"
tags: ["topic", "another"]
status: "published"
language: "en"
---
Your markdown content here.| Field | Required | Notes |
|---|---|---|
title |
Yes | Post title |
date |
Yes | ISO date, YYYY-MM-DD |
status |
Yes | published or draft |
excerpt |
No | Used in cards, SEO, digest, and email |
tags |
No | Array of strings for filtering |
language |
No | en by default, ar for Arabic posts |
coverImage |
No | Path relative to public/ |
author |
No | Defaults to siteConfig.name |
Your markdown files are the CMS. You can copy posts into content/posts/, symlink an Obsidian folder, or sync from a vault repo through GitHub Actions.
# macOS/Linux
ln -s ~/obsidian-vault/published content/posts
# Windows PowerShell as Admin
New-Item -ItemType SymbolicLink -Path content\posts -Target C:\Users\you\obsidian-vault\publishedThe repo also includes .github/workflows/sync-obsidian.yml for syncing from a separate vault repo.
| Variable | Required | Description |
|---|---|---|
RESEND_API_KEY |
Newsletter only | Resend API key |
RESEND_AUDIENCE_ID |
Newsletter only | Resend audience ID |
NOTIFY_SECRET |
Notifications only | Protects the new-post notification endpoint |
RESEND_FROM_EMAIL |
No | Sender address override |
NEXT_PUBLIC_SITE_URL |
No | Public site URL override |
NEXT_PUBLIC_NASA_API_KEY |
No | NASA APOD widget key |
NEXT_PUBLIC_GISCUS_REPO |
Comments only | Giscus repo name |
NEXT_PUBLIC_GISCUS_REPO_ID |
Comments only | Giscus repo ID |
NEXT_PUBLIC_GISCUS_CATEGORY |
Comments only | Giscus category |
NEXT_PUBLIC_GISCUS_CATEGORY_ID |
Comments only | Giscus category ID |
WALLETWALLET_API_KEY |
Wallet only | WalletWallet API key for Apple Wallet passes on /card |
| Layer | Technology |
|---|---|
| Framework | Next.js 15 App Router |
| UI | React 19, TypeScript, Tailwind CSS 3 |
| Content | Local Markdown with gray-matter |
| Markdown | unified, remark-gfm, rehype-slug, rehype-highlight, rehype-react |
| Fonts | IBM Plex Mono, Source Serif 4, local Thmanyah Sans, local Thmanyah Serif Text |
| Resend | |
| Comments | Giscus / GitHub Discussions |
| Analytics | Vercel Analytics and Speed Insights |
content/
site.ts Main English site config
locale.ts Arabic UI and resume copy
lab.ts Lab experiments and tool registry
card.md Digital business card data
posts/*.md Journal posts
app/
page.tsx English home
ar/ Arabic route tree
blog/[slug]/ Journal article route
lab/ Experiment lab
tools/ Utility tools
card/ Digital card
api/subscribe/ Newsletter subscription endpoint
api/notify/ New-post notification endpoint
api/tools/shorten/ Short link endpoint
api/card/vcard/ vCard endpoint
api/card/wallet/ Wallet pass endpoint
components/
boot-terminal.tsx Interactive terminal and command parser
theme-picker.tsx Theme dropdown, defaulting to Vercel
article-digest.tsx Skim cards for posts
reading-controls.tsx Theme, font, spacing, focus, progress
journal-client.tsx Searchable journal archive
lab-bench.tsx Experiments grid
everyday-tool-client.tsx Utility tool UI
splitter-client.tsx Bill splitter
card-client.tsx Digital card UInpm run dev # Development server
npm run build # Production build
npm run lint # ESLint
npm run typecheck # TypeScript check
npm run check # Lint + typecheck + builddocs/AI_CONTEXT.md- repo orientation for future AI sessions.docs/ROUTES.md- active route map.docs/ACTIVE_VS_LEGACY.md- active files vs older helper code.docs/INTEGRATIONS.md- external services and environment variables.docs/DESIGN_HANDOFF.md- design direction and guardrails.docs/enhancement-roadmap.md- shipped improvements and future ideas.
- Fork the repo.
- Create your branch:
git checkout -b feat/cool-feature. - Commit:
git commit -m "feat: add cool feature". - Push:
git push origin feat/cool-feature. - Open a pull request.
Report bugs or request features
Built by Waleed Alhamed




