Web Design · Development · Astro · Three.js · Launch Infrastructure
A digital presence for a mountain-side leisure destination above Koforidua, Ghana — quiet, deliberate, and rooted in the landscape.
Kwaeɛmu Resort is a nature and leisure day destination — no rooms, no pools, no weddings. It offers mountain hikes, fresh coconut, palm wine tasting, and a venue for events and celebrations. The brief was to build a digital presence that matched the place itself: quiet, deliberate, rooted in the landscape, and confident enough to stand alongside larger tourism brands in the region.
I led the project end-to-end under the CurioLabs brand — from initial design through CMS architecture, launch infrastructure, and client documentation.
Mr. Hansen needed more than a brochure site. He needed a system that could:
Communicate character without leaning on stock imagery or generic tourism tropes.
Host a real gallery that did justice to the location's natural beauty.
Run time-bound event campaigns — the Easter weekend launch was the first.
Be maintainable by a non-technical owner once the build was complete.
Sit on professional infrastructure — real email, analytics, search visibility — without ongoing cost surprises.
I scoped the architecture before writing any code. That decision shaped everything downstream: the design system, the file structure, the CMS choice, and even the pricing document. The goal was a site that felt handcrafted but ran on a foundation Mr. Hansen wouldn't outgrow.
The visual language was built around the place rather than imposed on it.
Type: Fraunces (serif, editorial) paired with DM Sans (sans, utility).
Palette: Emerald and forest green, amber and gold, cream, and parchment — drawn directly from the mountain environment.
Logo: Custom SVG mark.
Motion: Subtle CSS transitions and a WebGL bokeh particle field in the hero (Three.js r128) — used sparingly, never as decoration.
The design rejected interactive gimmicks: no 3D tilts, no hover theatre. Static compositions with controlled motion did more work, more quietly.


The entry point. WebGL bokeh hero, an editorial "Our Story" section, a responsive hamburger nav, and a lightbox gallery preview. Built mobile-first with the lightbox using position: fixed, margin: auto, and 100dvh to handle iOS Safari's chrome correctly — the kind of detail that decides whether a gallery feels professional or broken.

A standalone page with a film-strip hero, themed chapters, a masonry grid, and scroll-reveal animations. The aspect-ratio-aware lightbox keeps caption, dots, and counter visible at all times — the core UX requirement was that nothing important ever fell off-screen.
Built for the Easter weekend launch (3rd–6th April 2026). Live countdown, daily schedule grid, Google Calendar and .ics integration, WhatsApp booking buttons, and native share. A complete campaign page that doubles as a template for future events.


The site shipped as a fully responsive static build, then migrated to Astro in a planned Phase 1.
The Astro port introduced YAML content files — site.yaml, gallery.yaml, experiences.yaml — so all editable copy and imagery lives in plain-text, version-controlled files. 13 reusable components mirror the original page structure. A netlify.toml config tuned for the chosen hosting environment. A clean handoff archive ready for Phase 2.
Phase 2 (in progress) layers a GitHub Contents API client and authentication on top, evolving the site into a config-driven admin panel — a white-label CurioLabs product being designed for reuse across future clients.
The launch stack was chosen deliberately, not by default. Every decision was documented for the client.
Hosting: Netlify Starter — confirmed to support custom domains without requiring Pro.
Domain: Namecheap.
Email: Google Workspace Business Starter — chosen specifically for native IMAP Gmail on mobile, after ruling out Cloudflare Email Routing (incompatible with Netlify-managed DNS) and "Send mail as" workarounds.
Analytics: GA4 + Google Search Console.
A pricing PDF was delivered under the CurioLabs brand covering the website build, domain, hosting, and Google Workspace billing options — annual and monthly — with correct GHS / USD / EUR exchange handling.
A small but meaningful detail: the resort's name contains the Ɛ character (extended Latin). I generated the PDF in ReportLab using Liberation Sans, which renders Ɛ correctly — Helvetica does not. The pricing document was kept as a clean line-item list rather than a styled comparison table, matching how Mr. Hansen reads pricing in practice.
SEO: Google Business Profile, JSON-LD schema (LocalBusiness / TouristAttraction), hero H1 keyword work, WebP image compression, sitemap submission, and directory listings on Ghana Tourism Authority and TripAdvisor.
CMS Phase 2: GitHub API client and authentication flow.
Social media management: Scoped as an optional retainer add-on.
— A complete responsive marketing site with WebGL hero, lightbox gallery, and editorial sections
— A standalone gallery page with chapter-based storytelling and masonry grid
— A complete event campaign page with live countdown, calendar integration, and WhatsApp booking
— Phase 1 CMS migration to Astro with YAML content architecture and 13 reusable components
— Launch infrastructure: hosting, domain, professional email, and analytics
— A client-facing pricing PDF with correct multi-currency handling and proper Ɛ character rendering
— Architecture for a reusable white-label admin panel (in progress)


