I build systems,
not just websites.
I'm Dhanush Kumar — full-stack developer shipping production business systems.
From requirements to
production systems
I'm a Full-Stack Developer focused on business systems — the CRM, automation and internal tooling companies actually run their day on. I own the whole path: requirements → schema → APIs → UI → deploy → maintenance.
My core stack is React, Node.js, JavaScript/TypeScript, SQL/MySQL, REST APIs, AWS and Docker — the tools I reach for by default. I've also shipped with Java, Spring Boot, Hibernate, Python, PHP, Cloudflare Pages & Functions and GitHub Actions CI/CD.
1+ year of professional experience across the full lifecycle: requirement analysis, database design, development, deployment and ongoing maintenance — including a CRM built end-to-end for a live client operation.
Core stack I ship with
Eight tools I use daily — plus the wider set I have shipped real projects with.
Professional journey
- Built lead, customer and sales-pipeline modules with role-based dashboards.
- Wired email automation campaigns and WhatsApp API follow-ups with delivery tracking.
- Added quotation & billing workflows and real-time notifications.
- Handle schema changes, deploys and bug fixes in production.
- Shipped web apps with React, Node.js and SQL, front to back.
- Automated quotation, billing and communication flows inside client CRMs.
- Set up CI/CD pipelines and managed client hosting infrastructure.
- Learned HTML, CSS, JavaScript and backend fundamentals.
- Built first full-stack applications; explored Docker and DevOps tooling.
Projects, proven
Three production systems in depth — problem, architecture, stack, outcome. Below them, six live demos with working APIs you can open right now.
Custom CRM — lead to invoice, end to end
Leads, customers and quotations lived in spreadsheets and chat threads. No single source of truth, no role separation, and follow-up only happened when someone remembered to do it.
A custom CRM I own end-to-end: requirement analysis → database schema → REST APIs → role-based UI → deployment → maintenance. One system for pipeline, quotes, billing and outreach.
- Lead & customer management — every contact has one record with its full history.
- Sales pipeline + role-based dashboards — each role sees only the data it is meant to see.
- Quotation & billing workflows — quote → approval → invoice without leaving the app.
- Automated outreach — email campaigns and WhatsApp follow-ups, tracked per recipient.
- Real-time notifications — assignments and status changes surface the moment they happen.
DEEPER — SCHEMA, ROLES, OPERATIONS
- Relational model: customers → contacts → quotes → invoices, so a quotation always traces back to the lead and the person who approved it.
- Authorization at the API, not the UI: roles are checked server-side — hiding a button was never the security boundary.
- Status history: every pipeline transition is recorded: who moved it, when, and the note left with it.
- Outreach is data, not a mailbox: each send is logged against the contact with its delivery result.
- Ownership: I take the requirement from the business, design the schema change, ship it, and fix what breaks — no hand-offs.
WhatsApp & Email Automation — campaigns with receipts
Follow-ups went out one contact at a time from personal inboxes. Nobody could answer "who got what, when, and did it land" — and nothing was sent unless someone remembered.
An automation portal that schedules WhatsApp and email campaigns from reusable templates, sends them through provider APIs, and writes every delivery result back to one dashboard.
- Scheduled campaigns — one-off and recurring, created from the dashboard.
- Reusable templates with variables (name, reference number), so a message is written once.
- Two channels, one definition — the same audience is reached on WhatsApp and email from a single campaign.
- Delivery tracking per recipient — failures surface in the dashboard instead of hiding in a provider console.
- One audit trail — every send is tied to the contact record and the campaign that triggered it.
DEEPER — SENDING WITHOUT SURPRISES
- Pacing over volume: provider rate limits are the real constraint — sends are paced so a campaign never looks like abuse and gets the number flagged.
- Templates are rendered at send time: variables are filled server-side, so a recipient never sees a raw
{{name}}. - Status is part of the record: delivery and bounce results are written back to the send row — that is what makes the dashboard honest.
- Failures are visible, not silent: a failed batch shows up as a failed batch, and the operator decides whether to re-run it.
AI Lead Finder & Chatbot — prospects in, answers out
Prospect research was manual and slow — lists built by hand, qualification decided differently by everyone. Meanwhile, site visitors who did not find an answer left without leaving a trace.
Two connected tools: a finder that discovers, enriches and scores prospects from the web and pushes qualified leads into the CRM, plus an embeddable chat widget trained on site content that answers, captures, and hands off to a human.
- Discover → enrich → score: a lead reaches the CRM with context attached, not just a name and a domain.
- Qualification is explicit: scoring rules live in code, so the same lead is judged the same way every time.
- One-line embed: the widget is a single script tag that drops into any website.
- Grounded answers: the assistant answers from the site's own content instead of inventing one.
- Capture + handoff: what the visitor asked for is written as a lead, with the conversation attached for whoever picks it up.
DEEPER — WHY IT DOESN'T MAKE THINGS UP
- Grounding before generation: the reply is built from retrieved site content; when nothing matches, the widget says so and offers a human instead of improvising.
- Score before CRM: junk is filtered before a person sees it, which is what keeps the CRM trustworthy for everyone downstream.
- Prompts are code: they live in the repo with a change history, not in a chat window nobody can review.
- Handoff carries context: the human who picks up the chat reads the transcript, so the visitor never repeats themselves.
Six apps you can open right now
Not screenshots. Each one runs on this domain behind its own Cloudflare Pages Functions API and KV namespace — source in my GitHub repo.
City search with geocoding, current conditions, hourly strip and a multi-day forecast. Recent searches persist across visits.
Login with bearer sessions, employee records, attendance and leave requests, plus payroll reports — five endpoints behind one role check.
Kanban boards with drag-and-drop cards, a per-board activity log, and tasks persisted through dedicated boards / tasks / activity endpoints.
Catalogue, cart and checkout with register / login (token kept client-side) and real order placement — the full purchase path, not a mock-up.
An ingest endpoint receives events, charts update live, and any date range exports to CSV / JSON — pipelines you can watch run.
Dashboard, content editor, media library and SEO fields behind login — the CMS shape every client eventually asks for.
What I can deliver
Fixed scope, clear deliverables — pick what your project actually needs, not a package with filler.
Web Development
Business websites, dashboards and internal tools built with JavaScript, React, Node.js, REST APIs, Tailwind, AWS and Cloudflare.
Business Automation
CRMs, quotation & billing flows, and WhatsApp + email pipelines that take manual follow-up out of the day.
Backend Development
Node.js APIs with SQL storage, auth and role checks — deployed on AWS or Cloudflare behind CI/CD.
UI/UX Design
Interfaces designed in Figma and shipped with Tailwind CSS — responsive all the way down to 320px screens.
AI Integration
Chat widgets, lead scoring and AI-assisted content flows wired into the data you already have.
Deployment & Maintenance
CI/CD pipelines, hosting setup, and the unglamorous fixes and upkeep that keep production healthy after go-live.
Let's work together
Tell me what needs building — a CRM, an automation, a whole product. This form posts to a Cloudflare Pages Function that emails me directly, so it actually sends.