Vijit Dua

Portfolio

Apps

Projects

Music/YT

Blog

About

vijitdua.com CMS

vijitdua.com CMS

Full-Stack monolith powering my digital footprint / portfolio

May 2026 – Present

Next.jsPostgreSQLZodMulterResendNodemailerMaterial UISequelizeCloudflare R2Cloudflare TunnelsDockerGitHub Actions
Visit Site

[Brief Resume Version]

Details / Technology

  • Engineered a custom full-stack CMS (Next.js, Express.js, PostgreSQL) to centrally manage portfolio content, blogs, music releases, and mailing lists, replacing hardcoded React components with a dynamic, database-driven block renderer.
  • Implemented aggressive Server-Side Rendering (SSR) caching that auto-invalidates upon admin edits, ensuring lightning-fast page loads while minimizing database hits.
  • Built an integrated dynamic resume compilation engine that parses structured JSON data to instantly render and export custom-tailored, print-ready PDFs.
[Actual Showcase]

Context

You are looking at the frontend of this project right now.

This website didn't start as a monolith. I bought `vijitdua.com` in late 2024, and for the first few months, it was literally just a static HTML page acting as a link-tree for my socials. Over the last two years, it has continuously evolved to become the central nervous system for my entire digital footprint.

The Evolution:

  • Late 2024: Bought the domain. Shipped a basic static link-tree, followed by a very rudimentary hardcoded SPA create-react-app `/portfolio` page.
  • July 2025: Wanted SSR for SEO and also a better UI, so I moved over to Next.js after a brief period of experimentation with a custom Express.js-React.js-Hydration Combo for SSR, but finding it hard to maintain. Overhauled the UI to step away from the basic template look and make it feel like an actual personal hub. (If I own my name on the internet, might as well use it for more stuff than just jobs :D).
  • September 2025: Got tired of pushing code changes just to fix typos. Expanded the architecture to support music and creative portfolios by migrating all individual hardcoded React components into a static JSON file parsed by a custom content-renderer (pretending the site was dynamic).
  • February 2026: Added a dedicated backend to the site. Launched the `/blog` system and built the infrastructure for music and blog mailing lists, complete with custom email-drafting capabilities and unsubscribe links.
  • Late Feb / April 2026: Added a custom file-upload pipeline (so I didn't have to rely on `/public` static assets during deploys for my blogs and music ) and launched "Private Pages"—a lightweight Notion alternative for sharing secure, markdown-rendered docs with collaborators.
  • May 2026: The final leap. I migrated all the JSON files into a PostgreSQL database and expanded my `/admin` dashboard to control everything—content, domains, support routing, and even a custom dynamic resume builder. Oh, and I finally added light mode.
multimedia

What it actually handles today

This isn't just a text editor for my "About" page anymore. It handles:

The Dynamic Resume Builder

I have 20+ projects in my database, and while I use a standard resume for most applications, specific roles require highlighting different tech (e.g., hot-swapping Aggie Schedule Sniper for OutWatch when applying for an infrastructure role). Instead of fighting with formatting in external editors, this tool lets me hot-swap projects and experiences using the exact same CMS data that renders this public website. I just toggle what I want to show, adjust the scaling, and it generates a perfectly formatted PDF tailored for that specific job application.

multimedia

Music & Blog Hub

It manages my double-opt-in subscriber lists, blasts out newsletters/release emails, and automatically syncs my music link-trees (Spotify, Apple Music, etc.).

multimedia

Private Pages

I can spin up secure, markdown-rendered single pages to share specs, docs, or private links with collaborators.

multimedia

Open Source & Contributions

A centralized tracker that powers the `/contributions` page, dynamically giving credit to folks who submit PRs, bug reports, or feature ideas for my projects.

Domain & Support Routing

Maps out all my active subdomains (`vijitdua.com`, `lovlii.vijit.app`, `services.vijitdua.com`) and manages the customer support routing for my active apps.

Performance

To keep the live site lightning fast, it is aggressively cached using SSR. It barely touches the database on regular page loads. The cache just auto-invalidates specific routes via the admin panel the second I hit "save" on an edit.

Last updated: June 2, 2026