
Sandesh Shrestha
Feb 2026 - Present/Advanced
Live Demo
Codebase is confidential
Case Study: CTD AI - AI Growth Platform for Dental Clinics
Project at a Glance
- Role: Full-Stack / AI Platform Engineer
- Duration: Feb 2026 - Present
- Live: ai.connectthedoc.com
- Stack: React, Vite, TypeScript, Node.js, Express, Prisma, PostgreSQL, Redis, BullMQ, OpenAI/OpenRouter, Google Places, BrightLocal, DataForSEO, WordPress, Google Business Profile, AWS S3, Docker, Nginx
- Scale: ~280,000 lines of code, 54 Prisma models, background worker pipeline + product UI
- Team: Product engineering for Connect The Doc - I built and extended the AI growth system end to end
Problem
Dental clinics know they need local SEO, Google Business activity, and consistent content, but they do not have a marketing team. Existing tools give them dashboards or disconnected AI writers. CTD AI turns clinic onboarding into an automated growth engine: discover the practice, map competitors, generate on-brand content, publish it, and keep ranking/content intelligence fresh.
What I Built
Guided clinic onboarding that creates real data, not empty accounts
- Google Places-powered clinic search and confirmation
- AI practice summary + service guesses, neighbourhood targeting, and keyword selection with volume/difficulty signals
- Competitor discovery and first content/savings report so value shows up before the clinic "figures out the product"
Competitor intelligence
- Auto-discover nearby competitor clinics
- Local map-pack rank checks across target neighbourhoods and keywords (BrightLocal)
- Competitor GBP/blog activity tracking with weekly refresh jobs so rankings do not go stale
Content pipeline (plan -> draft -> queue -> review -> publish)
- Topic planning from services, keywords, and competitor gaps
- AI drafting for blog posts and Google Business posts in the clinic's voice (Practice DNA)
- Scheduled review queue so content ships steadily instead of dumping 20 drafts at once
- Publish to WordPress and Google Business Profile via real integrations
AI assistant grounded in live clinic data
- Chat that answers using clinic context, rankings, and content state - not a generic chatbot wrapper
- Practice DNA brand-voice profile so generation stays consistent across posts and chat
Platform engineering
- Express/TypeScript API with Prisma + Postgres
- BullMQ workers for enrichment, competitor scans, content generation, crawling, and scheduled jobs
- Docker Compose staging/production with Nginx TLS on
ai.connectthedoc.com - Production DB sync tooling so local debugging can use real-shaped data safely
Architecture Highlights
Clinic UI (React + Vite)
|
v
Nginx TLS ---> API (Express + Prisma + Postgres)
|
+-- Onboarding / Places / Keywords
+-- Competitor intelligence
+-- Content + Practice DNA
+-- WordPress / GBP integrations
|
v
Redis + BullMQ workers
|
+-- Rank scans / SEO crawls
+-- Content generation jobs
+-- Publish + refresh schedules
Hard Problems I Solved
- Onboarding that must feel magic and still be correct: Places confirmation, service inference, neighbourhoods, and keyword metrics have to compose into a coherent clinic graph on day one.
- AI that is operational, not theatrical: Drafts enter a queue with review and publish paths. Nothing "AI-generated" ships without clinic/admin control.
- Local SEO data is multi-vendor: BrightLocal, DataForSEO/SerpApi, Places, WordPress, GBP. Designed service boundaries and workers so failures in one provider do not take down the product.
- Brand voice at scale: Practice DNA keeps hundreds of posts on-brand without rewriting prompts by hand for every clinic.
Results & Impact
- Production system live at ai.connectthedoc.com
- Clinics go from login -> discovered practice -> competitor map -> first content batch in one guided flow
- Recurring weekly intelligence + content cadence without hiring a marketing ops person
- Large, maintainable codebase with clear product docs for every major feature area
What This Shows About Me
- I build AI products that plug into real business workflows (SEO, GBP, WordPress), not toy chat demos
- I can design long-running worker systems and multi-API orchestration
- I care about operator UX: queues, review, scheduling, and trust controls around generation
- I document and ship production platforms at serious scale (~280k LOC)
Links
Note: The codebase is confidential and not publicly available.