Official website for Plan A, a Sri Lankan event management agency and subsidiary of Codezela Technologies.
The site covers corporate events, conferences and MICE programmes, convocations and awards, weddings, brand activations, and event production in Colombo and across Sri Lanka.
- Next.js App Router
- React and TypeScript
- CSS custom properties and global responsive styles
next/fontfor Instrument Sans- Lucide icons
- Cloudflare Turnstile bot protection
- Resend email delivery
- npm package management
The contact form uses server-only Resend and Turnstile credentials. Copy .env.example to .env.local and replace the placeholder values before local development.
| Route | Purpose |
|---|---|
/ |
Main event management landing page |
/services |
Service overview |
/services/[slug] |
Six statically generated service pages |
/portfolio |
Selected event photography |
/about |
Plan A and Codezela relationship |
/contact |
Contact details and protected event brief form |
/api/contact |
Validated Turnstile and Resend form delivery |
| Unknown routes | Branded 404 response |
The contact form verifies every submission on the server with Cloudflare Turnstile, then sends the brief from notifications@plana.lk to info@plana.lk through Resend. It does not use a database or show a success state unless Resend accepts the email.
npm ci
cp .env.example .env.local
npm run devOpen http://localhost:3000, or use the port printed by Next.js when 3000 is unavailable.
Production Turnstile widgets can reject localhost. For local form testing, create .env.development.local with Cloudflare's official always-pass test site key and secret. The contact endpoint accepts those test credentials only while Next.js is running in development mode. Production builds always require the configured action and an allowed hostname.
npm run verifyThis runs ESLint, TypeScript checking, a production build, and the npm security audit. Individual commands are also available:
npm run lint
npm run typecheck
npm run build
npm audit --audit-level=high- Unique titles, descriptions, canonical URLs, Open Graph data, and Twitter cards
- Organization, professional service, website, service, FAQ, and breadcrumb structured data
- XML sitemap and robots routes
- Branded favicon, Apple touch icon, web app icons, manifest, and social sharing image
- Semantic headings, descriptive image text, internal service links, and a keyboard skip link
- Custom 404 and error recovery interfaces
Search rankings depend on the quality and authority of the live domain in addition to the website. After deployment, verify the production URL, submit https://plana.lk/sitemap.xml in Google Search Console, validate structured data, and keep the portfolio and service information current.
Business details and service content are centralised in src/lib/site.ts. Production images are stored under public/images/plan-a and should be compressed before they are added.
The Colombo Lotus Tower night photograph is by Gihanud2001, sourced from Wikimedia Commons, and dedicated to the public domain under CC0 1.0.
Do not add invented clients, testimonials, awards, performance figures, or service claims. Confirm business facts with Plan A before publishing them.
The project can run on a standard Next.js host. Before launch:
- Run
npm ciandnpm run verifyfrom a clean checkout. - Confirm the production domain, HTTPS, redirects, and response headers.
- Add every value from
.env.exampleto the production environment and confirmplana.lkin the Turnstile hostname allowlist. - Test every route and form interaction on desktop and mobile, including a real form delivery.
- Verify
robots.txt,sitemap.xml, manifest, icons, canonical URLs, and social previews on the live domain. - Connect the domain to Google Search Console and appropriate privacy-safe analytics if approved.
This repository is private and proprietary to Plan A and Codezela Technologies.