Skip to content
RAHUL/

Full Stack Engineer

I build complete products — interface to infrastructure — and the systems that keep them fast, secure and coherent as they scale.

MERNNext.jsAIProduct engineering
Entry
The way in

Every product starts as an empty space and a decision about what belongs in it.

Frontend
React · Next.js · TypeScript

Interface surfaces that stay calm under real data — composed, responsive, and consistent across every viewport.

Backend
Node · APIs · Services

Requests become contracts. Services stay small, boundaries stay honest, and traffic keeps moving.

Data
Postgres · Mongo · Modelling

Storage shaped around the questions the product will actually ask of it.

AI
Retrieval · Agents · Inference

Prompt, retrieval, reasoning, response — a pipeline like any other, with latency and failure modes to design for.

Cloud
CI/CD · Edge · Observability

Infrastructure that makes shipping boring — distributed, observable, and reversible.

  1. Entry
    The way in

    Every product starts as an empty space and a decision about what belongs in it.

  2. Frontend
    React · Next.js · TypeScript

    Interface surfaces that stay calm under real data — composed, responsive, and consistent across every viewport.

  3. Backend
    Node · APIs · Services

    Requests become contracts. Services stay small, boundaries stay honest, and traffic keeps moving.

  4. Data
    Postgres · Mongo · Modelling

    Storage shaped around the questions the product will actually ask of it.

  5. AI
    Retrieval · Agents · Inference

    Prompt, retrieval, reasoning, response — a pipeline like any other, with latency and failure modes to design for.

  6. Cloud
    CI/CD · Edge · Observability

    Infrastructure that makes shipping boring — distributed, observable, and reversible.

  7. Projects
    Five builds, end to end

    The work itself — analytics platforms, generative AI, fintech and marketing surfaces.

  8. Experience
    Two roles, deeper each time

    From agency cadence to owning a multi-application platform.

  9. Contact
    The way out

    Open to full-time roles and selective freelance work.

Frontend depth, full-stack range

I started in the browser and worked outward — into APIs, data models and the architecture that keeps a product coherent as it grows.

I design, build and ship production systems end to end — interface engineering, APIs, data models and the architecture that holds them together. Recently that has meant micro-frontend platforms, AI-assisted product surfaces and performance work that moves real numbers.

I care about code that lasts: clear boundaries, honest naming and interfaces that stay calm under real data. Good engineering, to me, is as much about what you decide not to build.

3+
20+
7
  1. Architecture

    Micro-frontends, shared component libraries and boundaries that let teams ship independently without drift.

  2. Performance

    Rendering strategy, asset discipline and measurement — recent work took a Lighthouse score to 98.

  3. Product thinking

    Deciding what to build and what to leave out, so the interface earns its complexity.

Full-stack engineer, end to end

Not a badge wall — a map of where I actually operate across the stack, with honest depth markers. Pick a domain to move the system into it.

  • Frontend
  • Backend
  • Database
  • AI
  • Architecture
  • Performance
  • Cloud
  • Security

Frontend Engineering: 17 technologies

Frontend Engineering

Component architectures and motion systems that stay fast and coherent as a product scales — including a shared library spanning three micro-frontends.

React.js CoreNext.js CoreTypeScript CoreJavaScript CoreTailwindCSS CoreRedux CoreZustand CoreContext API CoreGSAP CoreFramer Motion CoreHTML5 CoreCSS3 CoreResponsive Design Core
Zod Working knowledgeThree.js Working knowledge
TanStack Form ExploringTanStack Table Exploring
Day-to-day, shipped to production repeatedly.
Used in real projects; comfortable, still deepening.
Active study and prototypes — not production ownership yet.

What have I built?

Five builds — analytics, generative AI, fintech, marketing. Each one taken from interface through to backend.

Five builds, told properly

Every one of them has a full case study — the problem, the architecture, the engineering that was actually hard, and what shipped.

Two roles, deeper each time

From shipping client sites on an agency cadence to owning a multi-application platform — each step further into systems, not screens. Scroll to follow it.

Frontend Developer · Jasper Colin

B2B market research, data insights and analytics — a multi-application CRM platform plus an AI-powered lead-generation product.

  • Three CRM applications — Admin, Client and Supplier — had to ship and deploy independently without fragmenting the interface or duplicating UI code across teams.
  • The AI lead-generation product needed UI workflows wired directly into backend intelligence services while staying responsive.
  • A marketing site that marketing could turn into campaign-ready pages without waiting on engineering.
  • A micro-frontend CRM platform composed of independently deployable Admin, Client and Supplier applications.
  • A shared, reusable UI component library consumed by all three micro-frontends as the single source of interface truth.
  • The front end for an AI-powered lead-generation product, connecting UI workflows to backend intelligence services.
  • The public marketing site, structured for fast, campaign-ready page delivery.
  • Shared component library removed duplicated UI code across the three apps and cut new-feature build time by an estimated 40%.
  • Marketing site ships at a Lighthouse performance score of 98.
ReactNext.jsTailwindCSSMicro-frontends

Frontend Web Developer · Melange Digital

A digital studio shipping client web products across industries on an agency delivery cadence.

  • Client sites had to stay fast and visually consistent across browsers while being built and iterated on tight agency timelines.
  • Marketing teams needed to edit live copy and data without a deploy — a spreadsheet standing in for a lightweight CMS.
  • Motion and interaction had to feel considered, not bolted on, across a wide range of brands.
  • Scalable client websites delivered end to end, from build through cross-browser testing to launch.
  • Reusable UI systems and shared front-end standards carried from project to project.
  • A content pipeline backed by the Google Sheets API so non-technical teams could update live content directly.
  • Scroll and interaction layers built with GSAP and Framer Motion.
  • Delivered 15+ client projects end to end across a range of industries.
  • Shared components and review practice raised code consistency and maintainability across the team.
  • Cross-browser testing and an Agile workflow kept releases predictable on an agency schedule.
ReactNext.jsTailwindCSSGSAPFramer MotionGoogle Sheets APIGit / GitHub

How I keep production systems safe

Security handled as a build-time constraint, not an afterthought — from token handling and RBAC to CSP, headers and dependency hygiene.

In client projects and enterprise portals I build state-driven authorization: session state managed reactively in the frontend store to show or hide UI, with every API request routed through interceptors that enforce cryptographic verification on the backend. Rich client interactivity, strict server-side policy.

  • Silent token refresh that runs asynchronously before JWTs expire.
  • Hide structural components and actions reactively to guide users at the UI layer.
  • Enforce identical authorization mappings in the API layer — never trust client logic.

Route-level protection via Next.js edge middleware that checks claims and token metadata before page chunks load. Unauthorized users are redirected at the edge, before any sensitive JavaScript is downloaded or hydrated.

  • Intercept restricted endpoints at the edge to protect code-split assets.
  • Group routes under access tiers (e.g. /admin/*).
  • Re-check tokens during layout render before components mount.

To mitigate session hijacking and XSS token harvesting, access tokens live only in application memory (store / React state) and refresh tokens sit in Secure, SameSite=Strict, HttpOnly cookies — unreadable by client scripts.

  • Short expiry (5–15 min) on in-memory access tokens.
  • HttpOnly on auth cookies to shield them from document.cookie.
  • Prompt server-side revocation to invalidate compromised credentials.

Never trust user input. Validation schemas with Zod for form processing; DOMPurify before rendering or storing anything user-provided, neutralising injection risk at the point of capture.

  • Map Zod validation to form controls for real-time feedback.
  • Sanitize input at point of capture with DOMPurify.
  • Reject values outside logical bounds.

Lean on React's default string escaping. Where raw rich text is unavoidable, pass it through a strict DOMPurify config that strips scripts, event handlers and javascript: protocols.

  • Avoid dangerouslySetInnerHTML unless wrapped in a sanitised helper.
  • Verify hyperlinks resolve to http/https schemes.
  • Ship a strict Content Security Policy to block inline execution.

APIs rely on custom headers (Bearer authorization) that browsers do not auto-send cross-site. For cookie-based setups, SameSite=Strict is enforced.

  • Bearer headers instead of session cookies for cross-origin calls.
  • Confirm SameSite policies on every server-issued session token.
  • Validate CORS pre-flight origin for state-changing methods.

Restrictive CSP delivered via HTTP headers: execution limited to first-party and trusted CDNs, single-use nonces for inline scripts, no unsafe-inline or unsafe-eval.

  • default-src 'self' to lock down connections by default.
  • Server-generated nonces for trusted inline scripts.
  • report-only directives during staging to catch violations early.

All traffic over HTTPS (TLS 1.3). CORS scoped to explicit frontend origins — never a wildcard for authenticated endpoints.

  • Enforce TLS 1.3 for encryption in transit.
  • Whitelist client domains explicitly in CORS.
  • Request timeouts on HTTP clients to manage bottlenecks gracefully.

Credentials, password inputs and PII stay out of global stores and persisted files. Passwords live in transient variables cleared once the request completes; console leaks are stripped at build time.

  • Clear passwords from memory immediately after the auth request.
  • Never write credentials or profiles to local logs.
  • Strip console output at compile time (Terser).

Strict separation of secrets and config. Server keys never reach the client bundle — only NEXT_PUBLIC_ public parameters are compiled in.

  • Database URLs, payment secrets and JWT keys stay server-side.
  • All .env files listed in .gitignore.
  • Validate required keys at build time to catch misconfiguration.

Third-party supply-chain risk managed by scanning. npm audit plus Snyk in CI to flag and block insecure upgrades before they reach production.

  • Lockfile installs (npm ci) for reproducible pipelines.
  • Automated vulnerability audits in pre-commit hooks.
  • Check project health and support status before adopting a package.

Hardened HTTP headers at the host (X-Frame-Options: DENY, X-Content-Type-Options: nosniff, Referrer-Policy, HSTS) on every route.

  • nosniff to mitigate MIME-type sniffing.
  • Strict-Transport-Security to force HTTPS.
  • strict-origin referrer policy to limit referrer leakage.

Uploads checked for size, MIME category and magic bytes on the client, then routed to isolated storage buckets where files are renamed to random hashes to prevent execution.

  • Validate size and real binary header (magic bytes).
  • Restrict selectable file types on the input.
  • Never store user uploads in the application root.

Block embedding with X-Frame-Options: DENY and CSP frame-ancestors, so other origins cannot render the app in a hidden frame.

  • X-Frame-Options: DENY against third-party framing.
  • CSP frame-ancestors 'none' as a second barrier.
  • Frame-busting in base layouts for older browsers.

A strict storage classification: sensitive data (JWTs, refresh keys, PII) in HttpOnly cookies; non-sensitive preferences (locale, theme) in local or session storage.

  • Keep access credentials out of localStorage.
  • Clear sessionStorage on sign-out.
  • Encrypt any local data that must persist.

Error boundaries keep stack traces and database errors out of the browser. Users see generic messages; full traces go to a secure service like Sentry.

  • Return generic messages instead of raw API errors.
  • Keep stack details, SQL and traces on secure servers.
  • Global React error boundaries to prevent client crashes.

Security as a build-time constraint: eslint-plugin-security in the lint step, threat review before release, interfaces designed against the OWASP Top 10.

  • ESLint security presets to catch unsafe patterns in development.
  • Monthly audit of third-party package security.
  • Security checklists baked into release templates.

What can we build next?

Open to full-time roles and selective freelance work.

Let's build something considered

The fastest way to reach me is email — the form below goes to the same place.