Ekime Digital Service

CMS-driven marketing site for a Nigerian digital agency. Fast pages with a blog/portfolio the client can publish, and a contact pipeline that stores + emails leads.

React 19 (Vite)React RouterPlain CSSSanity CMSVercel FunctionsMongoDB Atlas

Context

  • Solo dev — UX, frontend, serverless API, CMS, deployment, DNS
  • Timeline: ~4 weeks (2025)
  • Team: Solo (client collab for content/brand)
  • React 19 (Vite)
  • React Router
  • Plain CSS
  • Sanity CMS
  • Vercel Functions
  • MongoDB Atlas
  • Nodemailer
  • GA4 / AdSense

Problem → Goals

Problem

  • Client needed a modern site to showcase services, publish content quickly, and capture inquiries reliably.

Goals

  • Ship a fast, responsive site with solid meta foundations.
  • Non-technical publishing via CMS for Blog & Portfolio.
  • Contact form that stores in DB and sends email.
  • Add monetization (AdSense) + analytics (GA4).

Solution

React 19 (Vite) SPA with route-level code splitting and plain CSS. Content in Sanity fetched via GROQ; images via Sanity CDN with responsive variants. Contact flow hits a Vercel serverless function that validates input, writes to MongoDB Atlas, and emails via Nodemailer. Deployed on Vercel with custom domain.

Highlights

  • Sanity schemas (blogPost, portfolioItem) with alt text + hotspot.
  • GROQ queries + @sanity/image-url for responsive images.
  • Serverless /api/contact with connection reuse and error handling.
  • Honeypot anti-spam, clear success/error UX.
  • AdSlot component with safe placements; GA4 route tracking.
  • Lighthouse-friendly image strategy (WebP, fixed dims, lazy).

Screenshots

Ekime home hero
Homepage hero and primary CTA
Services section
Services layout with right-aligned imagery
Blog list
CMS-powered blog list with images, excerpts, dates
Contact page
Two-column contact page with WhatsApp link

Results & Impact

  • Client publishes blog/portfolio without developer involvement.
  • Leads stored in Mongo and emailed instantly.
  • Shareable pages with consistent metadata.
  • Code-split routes and optimized images improve load time.

What I’d improve next

  • Categories/Tags + per-post OG image in Sanity.
  • Consent Mode v2 + cookie banner for GA/Ads.
  • Accessibility pass and unit tests for the API.