Converted the full HTML prototype into a proper Next.js 16 project with TypeScript and Tailwind. Built all pages and components from scratch — everything is now live on e-technix.com via Vercel.
Pages built:
Home page (Hero, Stats, How It Works, Track Grid, Foundation, Certifications, CTA), Programs page with full breakdown of all 6 specialisation tracks, How It Works page with all 4 phases in detail, Certifications page with all 6 certificates, and the Register page with Paystack payment integration.
Components created:
Navbar.tsx, Footer.tsx, Hero.tsx, sections.tsx (Stats, HowItWorks, TrackGrid, Foundation, Certifications, CTASection). All track and programme data lives in a single src/lib/data/tracks.ts file as the source of truth.
Payment integration:
Integrated Paystack using their inline JS approach instead of the react-paystack npm package, which doesn't support React 19. The script loads dynamically on the register page, opens a native Paystack popup on payment, and redirects to WhatsApp with the student's full details pre-filled after a successful transaction.
Deployment:
Project pushed to GitHub and deployed on Vercel. Custom domain e-technix.com connected via Hostinger nameservers pointing to Vercel. Cloudflare proxy was detected — boss has been notified to disable it (grey cloud in Cloudflare DNS settings).
Bugs encountered:
Bug 4 — sections.tsx and Footer.tsx were missing 'use client' at the top despite using onMouseEnter and onMouseLeave event handlers. Next.js threw a server/client boundary error. Fix: added 'use client' as the first line of both files.
Bug 5 — react-paystack@6.0.0 does not support React 19. npm install failed with a peer dependency conflict. Fix: dropped the package entirely and used Paystack's native inline JS script loaded dynamically via useEffect. No npm package needed.
// decision
1. Used Paystack's native inline JS instead of react-paystack — the npm package doesn't support React 19 and --force risked runtime crashes.
2. Kept all track and programme data in a single tracks.ts file rather than hardcoding it across pages — makes future updates (pricing, new tracks, tools) a one-file change.
3. Used inline styles throughout components instead of Tailwind utility classes — gives full control over the dark theme CSS variables (--cyan, --surface, --border etc.) that Tailwind can't reference directly without extra config.
4. Deployed on Vercel instead of Hostinger — current Hostinger plan doesn't support Node.js. Domain stays on Hostinger and points to Vercel via nameservers. Can migrate later when the plan is upgraded.
5. Used Paystack's test keys in .env.local during development — will swap to live keys after Paystack account verification is complete.
6. Priced tracks individually based on complexity rather than a flat fee — AI & Agentic Systems at the top (₦280,000) and Business Development at the most accessible (₦150,000), with instalment options at a small premium over half to account for the payment gap.