The public landing page for Siyana Code, the solo software studio of Rasindu Appuhami.
Open source, built in the open.
- Live site: https://siyanacode.tech
- Design system:
Siyana Brand/BRAND.md - Organisation: https://github.com/siyana-code
| Layer | Choice |
|---|---|
| Framework | Next.js 16 (App Router) |
| Language | TypeScript |
| Styling | Hand-written CSS with design tokens (src/app/globals.css) |
| Fonts | Fraunces (display) + Inter (body), self-hosted via next/font |
| Icons/brand | SVG mark in public/ |
No UI kit — the design system is small enough to own directly.
Requires Node.js 20 or newer.
npm install
npm run dev # http://localhost:3000Other scripts:
npm run build # production build
npm run start # serve the production build
npm run typecheck # tsc --noEmitNEXT_PUBLIC_SITE_URL sets the canonical URL used for metadata, the sitemap,
and Open Graph tags. It defaults to https://siyanacode.tech.
cp .env.local.example .env.localsrc/
app/
layout.tsx metadata, fonts, html shell
page.tsx the single page (composed from sections)
globals.css the whole design system
sitemap.ts sitemap.xml
robots.ts robots.txt
not-found.tsx 404
components/
Logo.tsx the mark + wordmark
Header.tsx sticky header
Footer.tsx site footer
ProjectCard.tsx featured project card
SectionHeading.tsx
CodeCard.tsx decorative Siyana Lang editor window
sections/ Hero, Principles, Projects, Process, Contact
config/site.ts brand identity + nav (single source of truth)
data/projects.ts the project list
public/ favicons, icons, OG image
- Brand identity (name, tagline, email, location, links) →
src/config/site.ts - Projects →
src/data/projects.ts - Colours & type → the
:rootblock at the top ofsrc/app/globals.css
The site is a standard Next.js app. The easiest path is Vercel (import the repository; the domain is set in Domains). Any Node-capable host works.
To host it as fully static files instead (GitHub Pages, Netlify, S3), add
output: "export" to next.config.mjs and serve the generated out/ folder.
The website source is MIT. The Siyana Code name and mark are the identity of the studio — please do not reuse the mark for something else.