prototype.rs

>
ENTRY 01 //

The Potting Shed Protocol

In a rain-soaked potting shed where moss grows on terracotta and beetles collect in glass jars, someone has set up a laptop. The keyboard sits between ferns and fungi samples. This is the origin of prototype.rs — a system for building systems using the materials at hand: raw, unrefined, found from the forest floor.

SPECIMEN
// The first prototype is always imperfect.
// That imperfection is the material itself.
fn build_from_found_materials() {
    let bark = collect_fallen_wood();
    let moss = cultivate_growth();
    let stone = polish_with_time();
}

Goblincore celebrates the chaotic order of nature — moss-covered rocks, tarnished keys, mushroom clusters, rain-soaked wood. prototype.rs applies this sensibility to technology. We build not with sterilized dark-mode editors, but with materials that carry the history of their origin.

ENTRY 02 //

Reading Patterns and Forest Edges

The F-pattern is how eyes naturally sweep across a page: left to right across the top, then down the left edge, dipping rightward for content blocks. In a forest, the eye follows edges — the tree line, the clearing, the path.

Here, content flows down the left side, leaving a wide right margin that becomes the "forest edge" — a space where decorative elements live without crowding the tutorial. This margin is not negative space; it is inhabited space, filled with watercolor moss patches and celestial markers.

PRINCIPLE
// F-pattern navigation
// Content: left-aligned, max-width: 1100px
// Margin: right side, reserved for forest-edge decoration

const layout = {
    container: { marginLeft: "clamp(48px, 8vw, 120px)" },
    rightMargin: "where stars pulse and moss grows"
};
ENTRY 03 //

Typography: Monospace Warmth, Serif Bookishness

JetBrains Mono carries the warmth of humanist design while serving code. Its distinctive ligatures and slightly softened mono grid feel like a botanist's carefully annotated field notes. For body text, Crimson Pro evokes the old-style serifs of a well-loved journal — warm, refined, designed for sustained reading.

TYPOGRAPHY SCALE
// Headings: JetBrains Mono weight 700
// Body: Crimson Pro weight 400
// Annotations: Crimson Pro weight 300 italic

// clamp(min, vw, max) for responsive scaling
--font-size-h1: clamp(2.2rem, 5vw, 3.8rem);
--font-size-h2: clamp(1.3rem, 2.5vw, 1.8rem);
--font-size-body: clamp(1.05rem, 1.5vw, 1.2rem);

The combination creates a field journal aesthetic — marginalia in monospace code sitting alongside refined serif prose. Technical and botanical. Precise and organic.

ENTRY 04 //

Palette from the Forest Floor

Every color maps to a natural material found underfoot:

Moss Green
Bark Brown
Lichen Gold
Star Pale
PALETTE
--color-bg: #F5F0E8;              // Aged parchment
--color-bg-alt: #EDE6DA;         // Darker parchment
--color-surface: #E8E0D4;        // Weathered paper
--color-moss: #6B7F5A;           // Code green
--color-bark: #8B6B4A;           // Strings
--color-lichen: #A0936B;         // Comments
--color-text: #3A3428;           // Deep earth
--color-text-secondary: #6B6254; // Warm stone
--color-border: #7A6B5A;         // Twig brown
--color-star: #C4A86E;           // Pale gold
ENTRY 05 //

Watercolor Rendering

All illustrative elements are CSS-generated watercolors: soft-edged, translucent shapes that bleed slightly beyond their bounds. They appear as section backgrounds, margin decorations, and accent elements. Each is slightly different in shape and opacity, creating organic variation without raster imagery.

SPECIMEN: MOSS CLUSTER
// Watercolor blob via CSS gradient
.watercolor {
    border-radius: 40% 60% 50% 50% / 60% 40% 50% 50%;
    background: radial-gradient(
        ellipse,
        rgba(107, 127, 90, 0.15),
        transparent 70%
    );
    filter: blur(2px);
}

This approach maintains visual richness while keeping load times minimal — no image assets, purely CSS. The organic randomness of border-radius values creates natural variation across the page.

ENTRY 06 //

Stars as Navigational Markers

Small star-shaped SVGs serve as both functional navigational markers and decorative accents. They pulse with a gentle scale oscillation — not synchronized, but individually phase-offset like fireflies. Each star has its own rhythm, creating an organic, breathing quality to the page.

PULSE ANIMATION
// Star pulse with phase offset
@keyframes star-pulse {
    0%, 100% { 
        transform: scale(1); 
        opacity: 0.7; 
    }
    50% { 
        transform: scale(1.15); 
        opacity: 1; 
    }
}

// Each star gets random animation-delay: 0s to 3s
// Creates asynchronous pulsing effect

Stars come in three sizes: small (12px), medium (20px), and large (32px). The large stars mark major section boundaries; small stars scatter as decorative dust throughout the margins.

ENTRY 07 //

Code Blocks as Bark-Texture Cards

Code blocks are styled to resemble bark-texture cards with minimal rounded corners (bark does not round). A dashed border frames each specimen, with horizontal grain lines simulating wood grain. Code text uses nature-themed syntax highlighting: moss green for keywords, bark brown for strings, lichen gold for comments.

FOREST SYNTAX HIGHLIGHTING
fn demonstrate_bark_texture() {
    "Everything is found material"
        .harvest()
        .refine()
        .build()
}

// This approach: no preprocessor, pure CSS
// Keywords: #6B7F5A (moss)
// Strings: #8B6B4A (bark)
// Comments: #A0936B (lichen)
ENTRY 08 //

Entrance Animations and Parallax

Each field journal entry fades in from the left (matching the F-pattern reading direction). The animation is triggered by IntersectionObserver when the entry reaches the viewport. Content translates from translateX(-20px) with zero opacity to its resting position with full opacity over 500ms.

The right-margin decorations (watercolor blobs, stars, annotations) scroll at 80% of page scroll rate, creating subtle parallax depth. This is achieved via JavaScript updating a custom property --scroll-y per frame, then applying transform: translateY(calc(var(--scroll-y) * -0.02)).

ANIMATION TIMING
// Section entrance
transform: translateX(-20px); opacity: 0
  → translateX(0); opacity: 1
duration: 500ms, easing: ease-out
triggered at: threshold 0.15

// Parallax depth
--scroll-y: updated per frame
transform: translateY(calc(var(--scroll-y) * -0.02))
ENTRY 09 //

The Terminal Prompt Animation

The hero section displays a simulated terminal prompt that types itself out character by character at 60ms intervals. A blinking cursor (a single-character border-right) follows the text, using a 1-second opacity keyframe animation. This creates the illusion that the site itself is being assembled as you watch.

TYPEWRITER IMPLEMENTATION
const typewriter = function(text) {
    let index = 0;
    const interval = setInterval(() => {
        if (index < text.length) {
            output.textContent += text[index++];
        } else {
            clearInterval(interval);
        }
    }, 60);
};

The prompt text reads: "building from found materials..." — a mission statement for the entire aesthetic. By the time the page has loaded, the site has already announced its purpose.

ENTRY 10 //

Building from Found Materials

prototype.rs represents a philosophy: that technology need not be sterile, that code can coexist with moss, that a development tutorial can feel like a field journal written in a potting shed. The goblincore aesthetic celebrates imperfection, found objects, and the chaotic beauty of natural systems.

This is what happens when you refuse the corporate aesthetic, when you reject the centered layout and photography-driven approach, when you sit down at a wooden workbench surrounded by lichens and terracotta and decide to build something that feels genuinely alive.

CLOSING NOTES
// prototype.rs is one of a kind
// It exists at 1% frequency in this collection
// Goblincore, F-pattern layout
// Nature-themed code syntax
// Field journal entry structure
// Phase-offset star animations
// Built without frameworks
// Performance: Core Web Vitals optimized
// Accessibility: WCAG 2.1 AA compliant

mod goblincore {
    fn celebrate() {
        moss::grow();
        decay::embrace();
        found_objects::treasure();
    }
}