Overview
abdulalim.dev is my personal portfolio, blog, and digital marketplace — built from scratch as a production-grade full-stack app. It doubles as a living demo of what I build for clients: fast, scalable, and maintainable.
The fastest way to understand production isn't reading about it — it's running your own platform and owning every layer, from the database to the deploy.
Features
- Digital marketplace — sell templates, themes, and tools with one-click checkout
- Points economy — users earn and spend points across the platform; balances, purchases, and transactions tracked in real time
- MDX blog — insights, tutorials, and changelogs authored in MDX with custom components
- Admin CMS — full back-office for products, projects, posts, users, and content — no code required to publish
- Auth — credential login with PBKDF2 hashing via Auth.js and edge-ready session handling
How It's Built
| Layer | Choice | Why |
|---|---|---|
| Framework | Next.js (App Router) | One codebase for marketing + authenticated dashboard |
| Database | PostgreSQL + Drizzle ORM | Type-safe queries, painless migrations |
| Assets | Cloudflare R2 | Cheap, S3-compatible, served at assets.abdulalim.dev |
| Auth | Auth.js + PBKDF2 | Edge-compatible sessions without a vendor lock-in |
| Content | JSON + MDX → DB | Authored in files, seeded into the DB, served at runtime |
Content is written in JSON and MDX, migrated into the database with an idempotent seed script, and served from the DB at runtime — so updating a page never needs a rebuild.
By the Numbers
- 6 content collections (projects, insights, tutorials, changelog, docs, tools)
- 1 unified codebase for the public site and the admin CMS
- 0 static rebuilds required to publish new content
- <100ms typical server response for cached pages
Roadmap
- Marketplace + points economy
- Admin CMS with full content control
- MDX blog with custom components
- Stripe payouts for marketplace sellers
- Public API for the points ledger
What I Learned
Building your own platform surfaces what actually matters in production: batch writes instead of transactions in edge environments, edge-compatible auth configs, R2 bindings vs. SDK calls, and why a caching strategy makes or breaks perceived speed.
