BaseLayout Preview · 15 Pages

A Platform For Experiments — Ottawa

Some Ideas Are Too Big For Conversations

Explore the work → Get in touch →
Civic Technology ◆ Contemplative Practice ◆ Art ◆ Design ◆ Open Platform ◆ Ottawa

What We Build

Civic
Technology for communities

Tools and experiments built for public benefit — accessibility, multilingual services, open data.

Explore →
Mind
Contemplative practice

Guided notes on Dhamma, meditation timers, and structured reflection tools.

Explore →
Art
Studio practice

An ongoing record of paintings, sketches, and process notes from the studio.

Explore →
Design
Product and systems

Product design work, interface systems, and visual language for Habitat Learn and beyond.

Explore →

What We Are

Some ideas are too small for institutions and too big for conversations. This is where they live.

Little Big Ideas is an open studio — a place where experiments get made, not just imagined. We build tools, ship prototypes, and publish thinking across civic technology, design, art, and contemplative practice.

This is not a portfolio. It is a platform. The work belongs to the ideas, not the person making them. Some experiments are finished. Most are ongoing. All are honest.

Current Experiments

What We're Building Now

CivicMultilanguage CaptionsActive
MindDhamma GuideActive
ArtPaintings ArchiveOngoing
CivicAI Can Find MeActive
DesignHabitat LearnShipped

Open Platform

We Create Opportunities To Create

Little Big Ideas is an open platform — experiments are shared, methods are documented, and work is published in the open wherever possible. Collaborators welcome.

Get in touch →

Civic / Initiative

Standard Inner Page

This is the standard layout used by index pages: Civic, Blog, Ideas, Initiatives, About, Contact. It uses .content-width with padding: 72px var(--pad) 48px. The nav and footer are injected globally via layout.tsx — no page needs to include them.


Column A

Section heading

Filler text. This shows how body copy sits in a two-column grid. The inner paragraph maxes out at 520–640px for reading comfort, not the full 1180px content column.

Learn more →

Column B

Another section

Columns are separated by gap only — no visible divider unless the design calls for one. Borders are 1–2px var(--ink). No box shadows anywhere.

Learn more →

Civic Active Ottawa

Tags use var(--acc) rust for text and border. They are compact: 10px Barlow Condensed 700, 0.18em letter-spacing. No fill — outline only. Used on categories, statuses, and location labels.

Writing / Notes

An Article Title That Spans Two Lines When Long

Essay May 2026 8 min read

This is the article layout used by blog/[slug], initiatives/[slug], and long-form writing. It uses .content-width with padding: 64px var(--pad) 96px for generous breathing room. The body text column is capped at 680px for reading comfort.

Quisque consequat sapien eget quam rhoncus, sit amet laoreet diam tempus. Aliquam aliquam ligula eget libero cursus aliquet. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas.

Section Subhead

Sed ut perspiciatis unde omnis iste natus error sit voluptatem accusantium doloremque laudantium. Nemo enim ipsam voluptatem quia voluptas sit aspernatur aut odit aut fugit. At vero eos et accusamus et iusto odio dignissimos ducimus.

// Code blocks inherit monospace font + --ghost background
const layout = { maxWidth: "1180px", padding: "72px var(--pad) 48px" };

Ut labore et dolore magnam aliquam quaerat voluptatem. Ut enim ad minima veniam, quis nostrum exercitationem ullam corporis suscipit laboriosam.


← All writing Next: Another Post →

Structural Audit · May 2026

Visual Inconsistency Report

Scanned 22 page files across src/app. The following inconsistencies were found and should be resolved by adopting BaseLayout and the shared token system.


1. Three Styling Systems Running In Parallel

The biggest issue. Different pages use completely different styling approaches with no shared vocabulary:

Pattern A (12 pages)
CSS Vars + Inline

about, civic, blog, contact, dhamma, ideas, initiatives, paintings/captions — use padding: "72px var(--pad)" and inline fontFamily

Pattern B (6 pages)
Tailwind Classes

experiments, projects, ideas/[slug], multilanguagecaptions, docs — use px-6 py-16, font-serif, bg-cream

Pattern C (scattered)
Hardcoded Values

All pages have some hardcoded hex values: #444, #aaa, #666, #3a2c4f, #2a7a4b that bypass the token system


2. Page-By-Page Wrapper Audit

Page Wrapper Padding Status
/Fragment <>inline 72px var(--pad)Non-standard
/about.content-widthinline 72px var(--pad)OK
/aicanfindme<div> (no class)inline 72px var(--pad)Missing class
/blog.content-widthinline 72px var(--pad)OK
/blog/[slug].content-widthinline 64px / 96pxOK
/civic.content-widthinline 72px var(--pad)OK
/contact.content-widthinline 64px / 96pxOK
/dhammaFragment (Client)inlineVerify wrapper
/experiments.content-width.px-6.py-16TailwindTailwind padding
/ideas.content-widthinline 72px var(--pad)OK
/ideas/[slug].content-width.px-6.py-20TailwindTailwind padding
/initiatives.content-widthinline 72px var(--pad)OK
/initiatives/[slug].content-widthinline 64px / 96pxOK
/multilanguagecaptions<div class="flex flex-col">Tailwind pt-20 pb-20Wrong wrapper
/paintings/captions.content-widthinline 32px / 64pxNon-standard padding
/product<div class="flex flex-col">inline mixedWrong wrapper
/projectsFragment + .content-width.px-6TailwindTailwind padding

3. Fix With BaseLayout

The new BaseLayout component at src/components/BaseLayout.tsx provides three variants that cover every case:

<BaseLayout variant="standard">   {/* 72px top, 48px bottom */}
<BaseLayout variant="article">    {/* 64px top, 96px bottom */}
<BaseLayout variant="full-bleed"> {/* home page sections */}
<BaseLayout variant="bare">       {/* caller controls padding */}