Your Tundra
One approach to creating your own flowing environment of precision and clarity
Introduction: Welcome, Traveler
Imagine you're a Martian who has just stumbled upon this strange repository. You see code, essays, automated workflows—all growing together in patterns you don't quite recognize. What is this place? How does it work? Could you grow one yourself?
Welcome to the tundra.
This repository—this Coldriver Tundra—is an experiment in living soil computing. Like Helen Atthowe's ecological farms, we're not just placing files on dead storage. We're cultivating a soil food web where:
- Essays are plants (visible growth)
- Build scripts (
bb
) are decomposers (breaking down complexity) - Git commits are mycelium (connecting everything underground)
- Cursor + AI are pollinators (cross-fertilizing ideas)
- CI/CD (
bb flow
) is the water cycle (continuous regeneration)
The soil gets richer over time, not depleted.
This essay documents one approach to cultivating such a system. Your garden will differ—this is just how ours grows.
A Note on Simple vs Easy (Before We Begin)
Rich Hickey teaches us: Simple and easy are different.
Simple (from simplex—"one fold"): Not intertwined. One role. One task. Objective, measurable.
Easy (from adjacens—"near at hand"): Familiar. Close to current understanding. Subjective, depends on experience.
This tundra:
- Is simple: Each tool does one thing (Babashka scripts, SvelteKit builds, Git commits)
- Might not be easy at first: Unfamiliar tools, new paradigm
- Gets easier with practice: As patterns become familiar
The trap: Easy tools (JavaScript, WordPress, drag-and-drop builders) often hide complexity that appears later—dependencies break, platforms change, vendor lock-in.
The path: Simple tools (Babashka, Git, static files) might feel unfamiliar at first, but complexity stays manageable as your garden grows.
We choose simple, knowing it requires patience. The Martian who learns these patterns can rebuild this garden on any planet, from first principles, a decade from now.
Part 1: Foundation - Tools & Accounts
Your Machine (macOS Sequoia)
Required:
- macOS Sequoia (15.0+)
- Cursor Pro subscription (or Cursor Free)
- 8GB+ RAM, 20GB+ free disk space
Install Homebrew (if not present):
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
Core Development Tools
Install via Homebrew:
brew install babashka node git
What these do:
- Babashka: Clojure scripting (fast builds, task automation)
- Node.js: SvelteKit web framework (static site generation)
- Git: Version control (source of truth)
Verify installation:
bb --version # Should show v1.x.x
node --version # Should show v20+
git --version # Should show v2.x
Part 2: AI Services - Multi-Model Strategy
Why Multiple AI Services?
Each AI has unique strengths. In my experience, using them together can help create richer, more nuanced work, though your mileage may vary:
Service | Strength | Use For |
---|---|---|
Claude (Anthropic) | Power & depth | Complex reasoning, long context |
ChatGPT (OpenAI) | Mission clarity | Structure, coherence, flow |
Grok (X/Twitter) | Real-time search | Current events, X integration |
DeepSeek | Poetic writing | Beautiful prose, creative expression |
Gemini (Google) | YouTube/Search | Research, multimedia context |
Qwen (Alibaba) | Code strategy | Future-proof open models |
Meta | Essence distillation | Summarization, core concepts |
Service Setup
Cursor Pro (required):
- Sign up: https://cursor.sh/
- $20/month (includes Claude Sonnet, GPT-4, other models)
- Best for: Primary development environment
Grok (optional, requires X Premium):
- X Premium+ subscription ($16/month)
- Access real-time X search
- Best for: Current events, trending topics
DeepSeek (optional):
- Free tier available
- API: https://platform.deepseek.com/
- Best for: Poetic, creative writing
Gemini (optional):
- Free tier available
- API: https://ai.google.dev/
- Best for: YouTube transcripts, Google Search integration
Qwen (optional):
- Open-source, self-hostable
- Hugging Face: https://huggingface.co/Qwen
- Best for: Future-proofing with open models
Meta Llama (optional):
- Open-source, self-hostable
- Download: https://llama.meta.com/
- Best for: On-device inference, privacy
Part 3: Codeberg - Sovereign Git Hosting
Why Codeberg?
Codeberg is not GitHub:
- ✅ Non-profit - Community-owned, no VC interests
- ✅ Privacy-focused - EU-based, GDPR-compliant
- ✅ Free - No paid tiers, no artificial limits
- ✅ Open-source - Forgejo (Git hosting), Woodpecker (CI)
- ✅ Pages - Free static site hosting
Create Account:
- Visit: https://codeberg.org/user/sign_up
- Choose username (lowercase, no spaces)
- Verify email
- Generate SSH key (next section)
SSH Key Setup
Why SSH keys?
- ✅ Secure authentication - No passwords needed for git push/pull
- ✅ Convenience - Automatic authentication once configured
- ✅ Industry standard - Used by all major Git hosting platforms
How Cursor Can Help with SSH Keys:
If you're new to SSH keys or encounter issues, Cursor can guide you through the entire process:
- Ask Cursor: "Help me generate an SSH ed25519 key for Codeberg on macOS and add it to my account"
- Cursor will provide: Step-by-step commands, troubleshooting for permissions, and verification tests
- Common issues Cursor helps with:
- SSH agent not running: Cursor will help start it with
eval "$(ssh-agent -s)"
- Permission denied: Cursor will fix file permissions (
chmod 600 ~/.ssh/id_ed25519
) - Key not being used: Cursor will add the key to ssh-agent with
ssh-add ~/.ssh/id_ed25519
- SSH agent not running: Cursor will help start it with
Generate new SSH key:
ssh-keygen -t ed25519 -C "your-email@example.com"
When prompted:
- Location: Press Enter for default (
~/.ssh/id_ed25519
) - Passphrase: Enter a strong passphrase (recommended) or press Enter to skip
Copy public key to clipboard:
cat ~/.ssh/id_ed25519.pub | pbcopy
Add to Codeberg:
- Go to: https://codeberg.org/user/settings/keys
- Click "Add Key"
- Paste your public key
- Give it a name (e.g., "MacBook Pro")
- Click "Add Key"
Test SSH connection:
ssh -T git@codeberg.org
# Should see: "Hi <username>! You've successfully authenticated..."
If you see "Permission denied", ask Cursor: "SSH connection to Codeberg failing with permission denied, help me debug"
Git Configuration
Set your global Git identity (required):
git config --global user.name "Your Name"
git config --global user.email "your-email@example.com"
Tip: Use the same email as your Codeberg account for consistency.
Verify configuration:
git config --global --list
GPG Key Setup for Verified Commits
Why GPG signing?
- ✅ Verified commits - Green "Verified" badge on Codeberg
- ✅ Cryptographic proof - You authored the commit
- ✅ Security - Prevents impersonation
- ✅ Professional - Shows you care about authenticity
How Cursor Can Help:
Cursor (with Claude or GPT-4) excels at helping with GPG setup because it involves multiple steps, potential errors, and platform-specific commands. Here's how to use it:
- Ask Cursor to guide you through GPG setup:
- Open Cursor
- Press
Cmd+L
(or click the AI chat icon) - Type: "Help me generate a GPG ed25519 key for Git commit signing on macOS and configure it with my Codeberg account"
- Cursor will provide step-by-step commands with explanations for each step
- Follow along and ask follow-up questions if anything fails
The process Cursor will guide you through:
Step 1: Install GPG (if not present):
brew install gnupg
Step 2: Generate GPG key (ed25519 - modern, secure):
gpg --full-generate-key
When prompted:
- Key type: Choose (9) ECC (sign and encrypt)
- Curve: Choose (1) Curve 25519
- Expiry: 0 = key does not expire (or set expiration if you prefer)
- Real name: Your Name (same as Git config)
- Email: your-email@example.com (same as Git config)
- Passphrase: Create a strong passphrase (Cursor can suggest secure practices)
Step 3: Get your GPG key ID:
gpg --list-secret-keys --keyid-format=long
Output will look like:
sec ed25519/ABC123DEF456 2025-10-11 [SC]
1234567890ABCDEF1234567890ABCDEF12345678
uid [ultimate] Your Name <your-email@example.com>
ssb cv25519/XYZ789GHI012 2025-10-11 [E]
The key ID is ABC123DEF456
(the part after ed25519/
).
Step 4: Export public key:
gpg --armor --export ABC123DEF456 | pbcopy
(Replace ABC123DEF456
with your actual key ID)
Step 5: Add GPG key to Codeberg:
- Go to: https://codeberg.org/user/settings/keys
- Click "Add Key" → GPG/SSH Key
- Select "GPG Key"
- Paste your public key
- Give it a name (e.g., "MacBook Pro GPG")
- Click "Add Key"
Step 6: Configure Git to use GPG:
# Tell Git to use your GPG key for signing
git config --global user.signingkey ABC123DEF456
# Enable GPG signing for all commits
git config --global commit.gpgsign true
# Ensure GPG uses the terminal for passphrase (macOS)
echo "export GPG_TTY=\$(tty)" >> ~/.zshrc
source ~/.zshrc
Step 7: Test GPG signing:
# Create a test commit
mkdir test-signing && cd test-signing
git init
echo "test" > test.txt
git add test.txt
git commit -m "test: verify GPG signing"
# Verify the signature
git log --show-signature
You should see gpg: Good signature from "Your Name <your-email@example.com>"
.
Cursor's Assistance Throughout:
- If GPG isn't found: Cursor will suggest installing via Homebrew
- If key generation fails: Cursor will troubleshoot (wrong curve, missing entropy, etc.)
- If passphrase prompt doesn't appear: Cursor will help configure
GPG_TTY
and pinentry - If Codeberg doesn't recognize the key: Cursor will help export in the correct armor format
- If commits still aren't verified: Cursor will debug Git config, email mismatches, or key expiration
Common issues Cursor helps solve:
- "gpg: signing failed: Inappropriate ioctl for device"
- Cursor will add the
GPG_TTY
export to your shell config
- Cursor will add the
- Email mismatch between Git and GPG key
- Cursor will check that
git config user.email
matches the GPG key's email exactly
- Cursor will check that
- Key not found by Git
- Cursor will verify
git config user.signingkey
is set correctly
- Cursor will verify
- Pinentry-mac not working
- Cursor will suggest switching to
pinentry-tty
or configuringgpg-agent
- Cursor will suggest switching to
Pro Tip: Ask Cursor to create a checklist document for you:
"Create a checklist document for SSH and GPG setup on macOS with Codeberg that I can reference later"
Cursor will generate a markdown file you can save to your repository (e.g., docs/SETUP-KEYS.md
) for future reference or to share with team members.
Part 4: Repository Structure
Create Your Repository
On Codeberg:
- Click "+" → "New Repository"
- Name:
your-tundra
(or whatever you like) - Description: "Experimental aspiringly helpful generative AI writings"
- Public (for Pages to work)
- Initialize with README: No (we'll create our own)
- License: Dual (Apache-2.0 / MIT recommended)
- Click "Create Repository"
Local Setup
Clone template (use this repo as starting point):
# Clone Coldriver Tundra
git clone https://codeberg.org/kae3g/12025-10.git your-tundra
cd your-tundra
# Change remote to your repo
git remote remove origin
git remote add origin git@codeberg.org:YOUR-USERNAME/your-tundra.git
# Create your branch
git checkout -b main
Directory Structure
your-tundra/
├── writings/ # Your essays (markdown)
│ ├── 9999-start-here.md
│ ├── 9998-next-essay.md
│ └── ...
├── web-app/ # SvelteKit site
│ ├── src/
│ ├── static/
│ └── package.json
├── scripts/ # Build automation
│ ├── writings_build_incremental.clj
│ └── deploy-to-pages.bb
├── docs/ # Documentation
│ ├── DEVELOPER-GUIDE.md
│ ├── BUILD-SYSTEM.md
│ └── QUICK-REFERENCE.md
├── bb.edn # Task definitions
├── .gitignore
└── README.md
Part 5: Configuration System
Your Tundra uses a two-tier configuration system: public/personal settings vs. private/secret data.
Understanding the Two Tiers
Tier 1: Public/Personal Configuration (.config.edn
)
- Safe to commit to your repository
- Safe to share in screenshots or with collaborators
- Contains: username, language, site title, preferences
- Generated from:
.config.template.edn
Tier 2: Private/Secret Configuration (.secrets.edn
)
- NEVER commit to your repository (in
.gitignore
) - NEVER share or include in screenshots
- Contains: API keys, auth tokens, GPG keys
- Generated from:
.secrets.template.edn
Create Your Public Configuration
Copy the template:
cp .config.template.edn .config.edn
Edit .config.edn
with your personal settings:
{:site
{:username "your-username" ; Your display name (shows in top-right)
:language "en" ; Primary language: en, es, de, fr, ja, zh, ar, pt, ru
:title "Your Tundra"
:description "Your description"}
:author
{:name "Your Name"
:email "you@users.noreply.codeberg.org"
:url "https://codeberg.org/your-username"}
:repository
{:platform "codeberg"
:username "your-username"
:repo-name "your-tundra"
:branch "main"}
:localization
{:timezone "America/Los_Angeles"
:locale "en-US"
:date-format "YYYY-MM-DD"
:planned-languages ["es" "de"]} ; Languages you plan to support
:preferences
{:editor "cursor"
:theme "dark"
:monospace-font "Courier New"}}
Important: This file is safe to commit! It contains no secrets. The site will automatically read your username and language from this config.
Create Your Private Secrets (Optional)
Only needed if using AI APIs directly (most people won't need this initially):
cp .secrets.template.edn .secrets.edn
Edit .secrets.edn
with your PRIVATE API keys:
{:git
{:signing-key "YOUR_GPG_KEY_ID"} ; From Part 3
:git-hosting
{:codeberg
{:token nil
:ssh-key-path "~/.ssh/id_ed25519"}}
:ai-services
{:openai {:api-key "sk-..."} ; Only if using OpenAI API directly
:anthropic {:api-key "sk-..."} ; Only if using Claude API directly
:deepseek {:api-key "..."}
:google {:api-key "..."}
:grok {:bearer-token "..."}}}
Important: This file is in .gitignore
and will NEVER be committed. It's for local automation only.
How the System Works
When you build your site:
bb config:generate
reads.config.edn
(public/personal)- Generates
web-app/static/site-config.json
(for the web app) - The site loads this config and displays:
- Your username (top-right, golden ratio position)
- Your language (top-left)
- Your site title
- Your repository info
When you run local scripts:
- Scripts can read
.secrets.edn
(private/secret) for API keys - But the public website never sees these secrets
- Secrets stay local, never deployed
Benefits:
- ✅ Separation of concerns: Public vs. private clearly distinguished
- ✅ Safe sharing:
.config.edn
can be public,.secrets.edn
cannot - ✅ Cursor-friendly: Cursor can help edit
.config.edn
safely - ✅ Template-driven: Easy for others to fork and customize
- ✅ Multi-language ready: Built-in support for internationalization
Internationalization Vision
Current: This tundra speaks English (language: en
)
Near future (next planned languages):
- Spanish (
es
) - Large global audience, growing tech communities - German (
de
) - Strong engineering culture, philosophical depth
Long-term vision (all languages welcome):
- French (
fr
) - Francophone world, African tech growth - Japanese (
ja
) - Precision culture, strong tech ecosystem - Chinese (
zh
) - Massive scale, computational philosophy - Arabic (
ar
) - Rich intellectual tradition, underserved in tech - Portuguese (
pt
) - Brazilian tech boom, Lusophone world - Russian (
ru
) - Mathematical heritage, strong computer science
Why internationalization matters:
- Permafrost foundations transcend language: Nock's 12 rules work in any tongue
- Precision flow is universal: Hilbert and Schauberger speak to all cultures
- AI can translate, but humans must guide: Machine translation for initial drafts, human review for cultural nuance
- Local tundras, global network: Each language community forks, adapts, improves
How to add a language (when ready):
- Update
.config.edn
: Set:language
to your code (e.g.,"es"
) - Create
writings/
essays in your language - Add translations for UI elements (optional, later work)
- Build and deploy:
bb flow "feat: Spanish translation"
- Share with your language community
The long-term goal: A constellation of tundras, each in its native language, all building on the same frozen foundations. Spanish speakers learning Nock. German speakers exploring s6. Arabic speakers building sovereign systems. Chinese speakers proving formal correctness. French speakers documenting ecological computing. Japanese speakers optimizing for minimal complexity.
We start with English because this tundra's author writes in English. But the system is designed for all languages. The templates support it. The config system enables it. The vision demands it.
If you speak another language fluently, your translation work is a gift to the commons. Fork this repo, translate the essays, change :language
in your .config.edn
, and share. The frozen clarity of the tundra speaks all tongues.
Part 6: Your First Essay
Create Essay 9999
cat > writings/9999-beginning.md << 'EOF'
---
title: "The Beginning"
date: 2025-10-11
---
# The Beginning
This is my tundra. A flowing environment of precision and clarity.
Here I will explore [your topic], guided by [your philosophy],
building toward [your vision].
**My multi-AI strategy**:
- Claude for deep reasoning
- ChatGPT for structure
- [Add your chosen AIs]
**My principles**:
- [Your principle 1]
- [Your principle 2]
- [Your principle 3]
The journey begins.
EOF
Build & Preview
# Install dependencies
cd web-app && npm ci && cd ..
# Build content
bb writings:build-fast
# Start dev server
cd web-app && npm run dev
Visit: http://localhost:5173/your-tundra/
Part 7: Deploy to Codeberg Pages
Enable Pages
On Codeberg:
- Go to repo → Settings → Pages
- Source: Branch
- Branch: pages
- Path: / (root)
- Click "Update"
First Deployment
# Make sure everything is built
bb deploy:full
# Or use bb flow to commit + deploy
bb flow "feat: initial deployment - my tundra begins"
Wait 1-2 minutes, then visit: https://YOUR-USERNAME.codeberg.page/your-tundra/
Part 8: Cursor Pro Workflow (Your REPL)
What's a REPL?
REPL = Read, Eval, Print, Loop
In Lisp/Clojure, you write code and instantly see results:
user=> (+ 1 2)
3
user=> (map inc [1 2 3])
(2 3 4)
Tight feedback loop: Type → Test → Learn → Type again.
Cursor + bb flow = REPL for essays:
Write → bb flow → See live site → Write again
You're not writing blind. You're conversing with your tundra.
Cursor Setup (Your Pollinator)
Install Cursor:
- Download: https://cursor.sh/
- Install, open, sign in with Pro account
- Open your tundra:
cursor /path/to/your-tundra
Configure:
- Cmd+K (AI inline edit—like asking a bee to pollinate this flower)
- Cmd+L (AI chat—like consulting the whole hive)
- @-mention files in chat (show AI the garden context)
Configure AI settings (critical for best results):
- Settings → AI → Models
- Enable all available models (Claude, GPT-4, o1, etc.)
- This gives Auto Mode full range to choose the best tool
- Settings → AI → Mode
- Select Auto Mode ⭐ HIGHLY RECOMMENDED
- Lets Cursor intelligently pick the best model for each task
- Amazing results: Auto Mode has been giving us exceptional output—it picks Claude for complex reasoning, GPT-4 for structure, o1 for deep problem-solving
- You get the best of all models without thinking about it
- Settings → AI → Model (fallback when not using Auto)
- Set to Claude Sonnet 4.5
- Enable auto-completions
Note: All models in Auto Mode are included in your Cursor Pro subscription ($20/month)—no extra charges within reasonable limits. The polyculture approach (Auto Mode) consistently outperforms using just one model.
The REPL Dance (Cursor + bb flow)
Example session (like a Clojure REPL, but for prose):
# Open file
cursor writings/9998-essay.md
# You: Cmd+L
"Help me write an essay about [topic], inspired by Helen Atthowe's soil ecology"
# Claude: (generates draft)
# You: Edit, refine, @-mention related essays
# Claude: Cross-pollinates ideas from your existing writings
# You: Test the cycle
bb flow "draft: essay 9998 initial thoughts"
# Build succeeds → pushed → deployed
# Visit live site, see your essay
# Notice what needs work
# You: Back to Cursor, refine
"Make this section more concrete, add examples"
# Claude: (improves)
# You: Test again
bb flow "improve: essay 9998 added examples"
# Repeat → Each cycle enriches the soil
You're not "writing and publishing"—you're gardening in real-time.
Multi-AI Polyculture
Like Helen's polyculture farms (many species, not monoculture), use many AIs:
Cursor (Claude) → Primary development, code, structure ChatGPT (browser) → Mission clarity, flow, coherence Grok (X) → Real-time research, current events DeepSeek → Poetic polish, beautiful prose Gemini → YouTube transcripts, search integration Qwen → Open-source patterns, future-proofing
Diversity is resilience. If one AI changes, your workflow adapts.
Part 9: The bb flow
Command (Your Water Cycle)
The Living System
In Helen Atthowe's farms, water cycles are everything:
- Rain falls → soil absorbs → plants drink → transpiration → clouds form → rain falls again
- Continuous regeneration, no waste
- Each cycle enriches the soil
Your tundra has a water cycle too:
bb flow "your commit message"
5 phases (like water moving through an ecosystem):
- 🌧️ Precipitation → Build content (markdown → JSON)
- Tests your changes in isolation
- Like rain testing soil absorption
- 💧 Infiltration → Stage changes (
git add -A
)- Changes soak into version control
- Like water entering the soil
- 🌱 Root Uptake → Commit (only if build succeeded)
- Changes become part of the living history
- Like plants taking water from soil
- 🌊 Transpiration → Push to Codeberg
- Changes flow to the community
- Like water vapor rising from leaves
- ☁️ Condensation → Deploy to Pages
- Changes become visible to all
- Like clouds forming and raining again
The Fourth Phase (Gerald Pollack)
Gerald Pollack's research: Water has a fourth phase beyond solid/liquid/gas.
EZ Water (Exclusion Zone):
- Forms at interfaces (like cell membranes, soil particles)
- Liquid crystalline structure (ordered, not chaotic)
- Water at ~4°C: Most dense, organized, mature
- Structured water carries more energy, information
In your tundra's water cycle:
The build phase (Step 1) is like water organizing into its fourth phase:
bb flow "message"
↓
Build starts (markdown → JSON)
↓
Your changes are TESTED, VERIFIED, STRUCTURED
↓
Like water molecules organizing into crystalline layers
↓
Only STRUCTURED changes flow forward
↓
Bad changes are excluded (like the Exclusion Zone rejects impurities)
Why this matters:
- Regular water (no testing): Chaotic, may contain impurities
- Fourth phase water (bb flow testing): Structured, verified, clean
- Only structured commits enter your repository's history
- The system stays healthy because bad changes are excluded at the interface
The cycle repeats. Each iteration enriches your repository's history with crystalline precision.
Why This Pattern Works
Simple (Rich Hickey):
- Each step does one thing
- No complecting (braiding) of concerns
- You can inspect each phase
Ecological (Helen Atthowe):
- Build errors stop the flow (like dry soil rejecting water)
- Good commits soak in naturally
- The system heals itself over time
REPL-like (Cursor + AI):
- Edit → Test → Deploy → Observe → Edit again
- Tight feedback loop (seconds, not minutes)
- Learn from each cycle
Part 10: Multi-AI Synthesis
The Power of Multiple Models
Each AI has blindspots. Using multiple models together creates something greater than any single AI could produce.
Example Essay Creation Flow:
Phase 1: Research & Ideation
Grok (X Premium):
→ "What's trending about [topic]?"
→ Real-time context
Gemini (YouTube/Search):
→ "Find expert videos on [topic]"
→ "What do scholars say?"
→ Deep research
Phase 2: Structure & Outline
ChatGPT:
→ "Create an outline for an essay on [topic]"
→ Clear mission, logical flow
Claude (Cursor):
→ "Expand this outline with arguments"
→ Deep reasoning, nuance
Phase 3: Writing & Refinement
Claude (Cursor):
→ Write first draft (power + depth)
DeepSeek:
→ "Make this more poetic and human"
→ Beautiful prose
ChatGPT:
→ "Does this flow well? Fix transitions"
→ Structural coherence
Phase 4: Code & Deployment
Qwen:
→ "Future-proof this code pattern"
→ Sustainable architecture
Claude (Cursor):
→ Debug, refactor, optimize
→ Final implementation
Phase 5: Synthesis & Distillation
Meta Llama:
→ "Summarize the essence in 3 sentences"
→ Core message extraction
Claude:
→ "Integrate everything coherently"
→ Final synthesis
Recording Your AI Process
In each essay, document which AIs helped:
---
title: "Essay Title"
date: 2025-10-11
pipeline: multi-ai-synthesis
ai_contributors: ["Claude", "ChatGPT", "DeepSeek", "Grok"]
---
**AI Synthesis Note**: This essay was developed through
collaboration with Claude (reasoning), ChatGPT (structure),
DeepSeek (prose), and Grok (research).
Why document this?
- Transparency about AI use
- Learning what works
- Honoring the collaboration
- Helping others replicate
Part 11: Customization
Your Own Metaphor
Don't copy "Coldriver Tundra" - find your own environment:
Examples:
- Desert Caravan - Movement, trade, oases
- Mountain Ascent - Altitude, clarity, summits
- Forest Canopy - Layers, growth, ecosystems
- Ocean Current - Flow, depth, navigation
- Prairie Wind - Open, minimal, far-seeing
Choose based on:
- Your personality
- Your topic area
- Your writing style
- What resonates with you
Your Own Colors
Edit web-app/src/lib/theme.css
:
:root {
/* Your light theme */
--color-bg: #your-color;
--color-fg: #your-color;
/* ... */
}
:root[data-theme="dark"] {
/* Your dark theme */
--color-bg: #your-color;
/* ... */
}
Test with:
cd web-app && npm run dev
# Click * toggle to switch themes
Your Own Structure
Essay numbering - you choose:
- 9999 → 0000 (descending, like this repo)
- 0001 → 9999 (ascending)
- 2025-01, 2025-02, etc. (date-based)
- series-name-01 (series-based)
Just be consistent and update the sort in:
scripts/writings_build_incremental.clj
scripts/writings_build.clj
Part 12: Maintenance
Daily Workflow
# 1. Write
vim writings/9998-essay.md
# 2. Preview
bb writings:build-fast
cd web-app && npm run dev
# 3. Deploy
bb flow "feat: add essay 9998"
Weekly Tasks
# Update dependencies
cd web-app
npm update
npm audit fix
# Clear old cache if issues
rm ../.build-cache.edn
cd .. && bb writings:build-fast
Monitoring
Check CI status: https://ci.codeberg.org/repos/YOUR-REPO-ID
Check site: https://YOUR-USERNAME.codeberg.page/your-tundra/
Check git status:
git status
git log --oneline -10
Part 13: Advanced Patterns
Multi-Language Support
Add translations:
writings/
├── en/
│ └── 9999-essay.md
├── es/
│ └── 9999-ensayo.md
└── fr/
└── 9999-essai.md
Update build scripts to process subdirectories.
Series & Collections
Use front matter:
---
title: "Essay Title"
series: "Tundra Philosophy"
part: 3
total: 10
---
Filter by series in index generation.
Rich Media
Embed images:

Embed videos:
<video controls>
<source src="../assets/video.mp4" type="video/mp4">
</video>
Custom Components
Create Svelte components:
<!-- web-app/src/lib/Callout.svelte -->
<div class="callout">
<slot />
</div>
Use in markdown (with MDsveX plugin).
Part 14: Community & Sovereignty
Why This Matters
You own your tundra:
- Your content (markdown files)
- Your code (open-source)
- Your deployment (Codeberg)
- Your data (no platform lock-in)
You control the AI:
- Choose which models
- Switch anytime
- Mix and match
- Self-host if desired (Qwen, Meta)
You preserve knowledge:
- Plain text (markdown)
- Version controlled (git)
- Deployable anywhere
- Archival-quality
Forking & Remixing
This repo is dual-licensed (Apache-2.0 / MIT):
- Fork it
- Modify it
- Make it yours
- Share improvements
Give credit (but not required):
Built on [Coldriver Tundra](https://codeberg.org/kae3g/12025-10)
Sharing Your Tundra
Codeberg Pages is public - anyone can read.
Share your URL:
- Social media
- Email signature
- Portfolio
- Resume
Connect with others:
- Link to other tundras
- Credit influences
- Build a network
Part 15: Troubleshooting
Build Fails
# Clear cache
rm .build-cache.edn
bb writings:build-fast
# Check specific file
bb -e "(require '[markdown.core :as md]) \
(println (md/md-to-html-string (slurp \"writings/9999.md\")))"
Deploy Fails
# Check .gitkeep exists
ls web-app/static/content/.gitkeep
# Ensure remote is correct
git remote -v
# Test SSH
ssh -T git@codeberg.org
Site Not Loading
- Wait 2 minutes for Pages rebuild
- Hard refresh (Cmd+Shift+R)
- Check CI logs
- Verify Pages settings on Codeberg
Part 16: Next Steps
Your Journey
Week 1: Setup & first essay
- Install tools
- Configure accounts
- Write essay 9999
- Deploy!
Week 2: Find your rhythm
- Write daily
- Experiment with AIs
- Refine your metaphor
- Build your style
Month 1: Develop your system
- 10-20 essays
- Custom components
- Series structure
- Community connections
Year 1: Your body of work
- 50-100+ essays
- Refined philosophy
- Teaching others
- Your unique voice
Resources
This Repository:
- Developer Guide:
docs/DEVELOPER-GUIDE.md
- Build System:
docs/BUILD-SYSTEM.md
- Quick Reference:
docs/QUICK-REFERENCE.md
External:
- Codeberg: https://docs.codeberg.org/
- SvelteKit: https://kit.svelte.dev/
- Babashka: https://book.babashka.org/
Conclusion: Your Flowing Environment
Dear Martian traveler,
You've seen how this tundra grows:
Living soil (Helen Atthowe):
- Essays are plants, scripts are decomposers, Git is mycelium
- Each commit enriches the soil
- The system heals and improves itself
- No-till computing: Gentle intervention, not disruption
Simple tools (Rich Hickey):
- Each tool does one thing (Babashka, Git, SvelteKit)
- Not braided together (complected)
- Unfamiliar at first, but manageable as you grow
- Simple over easy: Patience over quick wins
Water cycles (bb flow):
- Precipitation → Infiltration → Root Uptake → Transpiration → Condensation
- Continuous regeneration, no waste
- Each cycle tests and enriches
- REPL for prose: Write → Deploy → Observe → Write again
Polyculture AIs (Multi-model):
- Many species, not monoculture
- Each AI has its role (Claude, ChatGPT, Grok, DeepSeek...)
- Diversity is resilience
- Cross-pollination: Ideas flow between models
Every tundra is unique. If you build one on Mars (or Earth), yours might reflect:
- Your topics - What you explore
- Your voice - How you express
- Your AIs - Who you collaborate with
- Your philosophy - What you believe
Some foundations are shared - frozen specifications, simple tools, water cycles, living soil. But the environment will be yours.
If this approach resonates, you might start with:
# A first command
mkdir my-tundra
cd my-tundra
git init
# The soil is ready. Begin planting...
Built on permafrost. Written with AI. Grown by you. Owned by the commons. ❄️🌱🌊
For the Martian: When you return home, take these patterns with you. They work on any planet with Git, any civilization with simple tools, any species that values living systems over dead infrastructure.
The tundra awaits your footprints.
Appendix: Tool Versions (as of 2025-10-11)
- macOS Sequoia: 15.0+
- Cursor Pro: Latest
- Babashka: 1.4+
- Node.js: 20.x LTS
- SvelteKit: 2.x
- Codeberg: Forgejo 8.x
License: This essay and the Coldriver Tundra codebase are dual-licensed under Apache-2.0 / MIT. Use freely, modify as needed, build your own tundra.
Ready to Begin?
You've seen one approach to building a tundra—a system for writing, thinking, and creating with AI assistance. You've seen the tools, workflows, and multi-AI strategy that have been helpful for this project.
Whether you build your own or explore what others have built, there's more to discover. Return to the main index to see essays on computing systems, philosophical foundations, and community-driven technology. Or experiment with your own tundra—the flowing environment is there if you want it.
← Back to Main Index