BEHIND THE PORTFOLIO

About this app

This is not a template with a new coat of paint. kittykio.com is a small, full-stack portfolio product: a home for case studies, technical writing, experiments, and thoughtful ways to start a conversation.

Next.js + TypeScriptMDX + MongoDBCreative, but built light

01

Architecture & stack

Framework

Next.js 14 App Router and React 18 provide server-rendered routes, route metadata, API routes, static generation where appropriate, and a clean client/server boundary.

Language & styling

TypeScript keeps content and feature contracts explicit. Tailwind CSS and Sass variables power the responsive layout and a shared palette: charcoal, warm grays, flame red, and lemon.

Motion & 3D

Framer Motion handles layout and interaction motion. React Three Fiber, Drei, Three.js, GSAP, Leva, and tsParticles support the interactive Now/lab experiments.

Writing

MDX files are compiled with next-mdx-remote. Remark and Rehype plugins add GFM, headings, a table of contents, and highlighted code blocks.

Data & requests

MongoDB with Mongoose stores likes, requests, and first-party analytics events. Resend can notify Kitty Kio by email whenever a visitor submits a request.

Hosting & observability

The app is ready for Vercel deployment, Vercel Analytics, optional Google Analytics, and a private first-party insights dashboard.

02

The experience, page by page

/

Home

The introduction is a creative developer version of the original art-led landing experience.

  • Letter-by-letter welcome motion with a playful hover scatter
  • Animated section transitions, work highlights, experience, interests, and contact pathways
  • Responsive layout that retains the visual personality without assuming a desktop viewport

/projects

Projects

A curated case-file gallery for development work.

  • Tag filters are derived from project content and persist in the URL for shareable views
  • Floating/tilting cards, pagination, likes, sorting, save-for-later, and copy/native sharing
  • Each card can open its case-file interaction or a direct structured case-study route

/blog

Blog

A technical writing library built around MDX rather than a CMS.

  • Multi-tag filtering, stable card stacking, three-column desktop layout, pagination, likes, saves, and sorting
  • Estimated reading time, reading completion tracking, series suggestions, and previous/next reading
  • MDX components, syntax-highlighted code, table of contents, images, and English/Japanese article variants

/now

Now

The former lab is reframed as a living snapshot of current experiments and how the site behaves.

  • Interactive 3D sky and cloud controls, editable palette, motion play/pause, and experiment carousel
  • Built-light panel that reports theme, image/motion approach, performance mode, and reduced-motion state
  • Extra contextual writing that turns experiments into an honest “what I am exploring now” page

/contact

Contact & requests

A deliberate alternative to a generic contact form.

  • Project, article, and contact request flows with scope, timeline, budget, and preferred contact method
  • MongoDB request storage and optional Resend email notification to modularmanul@gmail.com
  • Ask Kiki is intentionally a friendly coming-soon state until AI usage is enabled

/saved

Saved

A small private reading and project library that lives entirely in the visitor’s browser.

  • Projects and posts are grouped separately in a distinctive library interface
  • Saved entries use localStorage: no account, tracking profile, or server-side personal library
  • Available from the header, footer, and command palette

/resume

Résumé

A printable one-page professional overview.

  • Clear experience, skill, and contact snapshot
  • Print-to-PDF action and a direct contact path
  • Japanese route available alongside the English version

03

Visual system

Colour, type, shape, spacing, and motion are treated as one system rather than separate decoration. Lemon and flame red are the site’s two lead accents: they guide attention and action. Neutral grays carry reading, while rainbow colours are reserved for Now experiments.

MAIN ACCENT

Lemon

#e8ff38

Primary accent: active states, bookmarks, and optimistic contrast

MAIN ACCENT

Flame 500

#cb4625

Primary action: calls to action, links, and shared hover states

Flame 300

#eb7858

Lighter flame accent for softer emphasis

Flame 700

#8c280d

Pressed states and deeper accent contrast

Flame 900

#591806

The darkest flame shade for depth

White

#ffffff

Light-mode canvas and high-contrast card surface

Gray 100

#e6e6e6

Light cards, quiet surfaces, and separators

Gray 300

#bababa

Subtle borders and soft supporting surfaces

Gray 500

#8b8b8b

Secondary text and supporting UI

Gray 700

#505050

Strong secondary text and dark separators

Charcoal

#292929

Dark-mode canvas and primary dark text

Black

#000000

Maximum contrast for icon and code details

Cocoa 700

#2d2926

Dark-mode raised surface

Cocoa 900

#2c2522

Dark-mode canvas

Lab sky

#87ceeb

The Now page sky base

Rainbow red

#ff6b6b

Experimental cloud highlight

Rainbow orange

#ffad69

Experimental cloud highlight

Rainbow yellow

#ffe66d

Experimental cloud highlight

Rainbow green

#7bd389

Experimental cloud highlight

Rainbow blue

#70c1ff

Experimental cloud highlight

Rainbow violet

#b388eb

Experimental cloud highlight

Typography roles

Kitty Kio — brand display

Section heading

Navigation & headings

Body copy uses Sulphur Point: readable, quiet, and human.

Sometype Mono is reserved for code and technical notes.

Main style principles

  • 01 — Large rounded cards and surface-led hierarchy instead of heavy outlines.
  • 02 — White/warm-gray light mode and charcoal dark mode, both with deliberate contrast.
  • 03 — Shared flame-red hover states make interactive elements consistently legible.
  • 04 — Motion supports meaning; reduced motion preserves the experience’s structure.

04

Content, data & interaction

Content-first tags

Tags are the common language for projects and posts. They are read from content, deduplicated for filter controls, and reflected in shareable URLs instead of being managed in a separate admin panel.

Generated identities

Posts and projects receive stable generated identifiers from their content. New JSON project records and new MDX posts can participate without manual like IDs.

Likes with sensible limits

Likes are persisted in dedicated MongoDB collections and limited to ten expressive reactions per item, keeping the feature playful without becoming a noisy leaderboard.

Bilingual foundation

The route structure supports /ja equivalents, locale-aware navigation, translated interface text, and separate Japanese MDX sources. Language switching preserves the current route whenever there is an equivalent.

05

SEO, social previews & delivery

Metadata per route

The root layout supplies the baseline title, description, icons, keywords, Open Graph, and Twitter metadata. Post and project routes add their own canonical URL, title, description, article date where relevant, and social image.

Generated branded OG cards

Social previews are generated on demand at /api/og with Next’s ImageResponse. The cards use the portfolio palette, original cat logo, route type, title, and description—rather than falling back to an unrelated cover crop.

Search engine foundations

metadataBase is driven by NEXT_PUBLIC_SITE_URL. Dynamic sitemap.xml and robots.txt use the same site URL, and include the core routes plus post and project pages.

Sharing behaviour

Posts and projects expose native sharing on supported devices and a reliable copy-link fallback everywhere else, with analytics events for both paths.

06

OG images: how they work

Generated, not uploaded

OG cards are not static uploads. Next.js ImageResponse generates them on demand at /api/og with the shared palette and original cat logo.

Per-page content

The home page, every project, and every post pass their own title, description, and type to the OG route, so shared links receive a relevant branded card.

Verify after deploy

Open /api/og?type=site first. Then re-scrape a post or project URL with a LinkedIn/Discord debugger. Old previews are usually cached by the social network, not the app.

07

Performance, privacy & accessibility

Responsive by design

Layouts adapt from compact phones through tablet to desktop: navigation collapses, grids reduce columns, controls wrap, and typography/spacing use breakpoints rather than a single fixed canvas.

Motion preferences

A visible motion control complements the operating system’s prefers-reduced-motion setting. It reduces decorative motion and 3D movement without hiding the underlying content.

Fast where it matters

Next image handling, lazy motion features, static generation for article paths, responsive card layouts, and modest visual effects aim to keep the art-led interface from feeling heavy.

Privacy-minded saving

Saved items stay in localStorage on the visitor’s device. The app does not require sign-in or send their saved library to MongoDB.

08

Operations & configuration

Required production settings

NEXT_PUBLIC_SITE_URL is set to https://kittykio.com so canonical links, sitemap entries, robots.txt, and OG URLs consistently point to the production domain.

Data and email settings

MONGODB_URI connects likes, requests, and analytics to the portfolio-project database. RESEND_API_KEY and a verified sender/domain enable contact notification email.

Optional services

NEXT_PUBLIC_GA_ID enables Google Analytics. ANALYTICS_DASHBOARD_TOKEN protects /insights. An OpenAI key can later power Ask Kiki once usage credit is available; request modes do not depend on it.

Private insights

The /insights page is deliberately token-protected. First-party events include content views, opens, filters, saves, shares, copy-link actions, reading completion, contact activity, and command-palette searching as each integration is enabled.

09

Analytics & insights setup

What is measured

First-party events capture useful product signals only: project opens, tag filters, post views and completion, saves, shares, copied links, contact activity, and command-palette searches.

How to enable it

Add MONGODB_URI and ANALYTICS_DASHBOARD_TOKEN in Vercel and .env.local, then open /insights?token=YOUR_TOKEN after deployment. Never place the token in code or a public link; keep it in a password manager.

Optional services

Vercel Analytics needs no additional key. Add NEXT_PUBLIC_GA_ID only if you want Google Analytics too. The repository’s DEPLOYMENT_CHECKLIST.md has the complete setup and launch checks.

10

How it is made

The app began with the creative visual language and content affordances of the art portfolio, then selectively brought over the speed-oriented patterns of the dev portfolio. The result is intentionally hybrid: expressive enough to feel authored, structured enough to help a hiring manager or collaborator quickly find work, writing, proof of craft, and a way to reach out.

Kitty Kio

Thoughtful code can be useful, expressive, and a little bit magical.

Kitty Kio cat logo wearing a bucket hat

© 2026 Kitty Kio. Code is MIT licensed; content and branding are all rights reserved.