Brand System
The fullpicture brand system
Every element on this site — every color, shape, typeface, and animation — exists for a reason. This page documents those reasons.
fullpicture is a freelance engineering consultancy. The brand communicates three things: technical rigor, creative craft, and the ability to see the whole picture. We don't do corporate polish. We don't do startup chaos. We build systems that work, and the brand reflects that.
Color
Warm teal, burnt orange, and a lot of cream
The palette is intentionally constrained. Cream dominates (90%+ of surface area). Teal provides structure and trust. Orange creates moments of energy — CTAs, highlights, the things that matter. Salmon and mint exist as softer variants for supporting roles.
The rule: if everything is colored, nothing stands out. Color is reserved for elements that earn it.
Backgrounds
Teal family (structural)
Accent family (energy)
Neutrals
Surface area budget — color earns its place.
Typography
Space Grotesk does all the work
One typeface, no exceptions. Space Grotesk is geometric enough to feel technical, warm enough to feel human, and bold enough at heavy weights to carry a page without images. The brand relies on typographic scale for hierarchy — not color, not decoration.
Bold type carries the message. Color supports. Decoration is optional.
Headlines are weight 700–800, near-black, tight letter-spacing. Body is 400–500, comfortable reading. The gap between them is the hierarchy.
Shapes
16 shapes, 4 colors, infinite configurations
The geometric shape system is fullpicture's most distinctive brand element. Playful blocks with mixed radii — domes, drops, circles, squircles, leaves, flowers — that combine into larger compositions. They're not icons. They don't represent specific things. They're building blocks — atoms that gain meaning through assembly.
The system was designed to feel hand-crafted but systematic. Every border-radius is intentional. Every combination is considered. The shapes live at the intersection of engineering precision and creative play — which is exactly where fullpicture operates.
Foundational (4) — the favicon quad
Directional (8)
Organic (2)
Directional Domes (3)
Shape × Color matrix (favicon quad × 4 brand colors)
Semantics
Shapes are atoms. The grid is the molecule.
Individual shapes don't carry fixed meaning — they're interchangeable building blocks. What carries meaning is how they're assembled. The core brand metaphor is the transition from scattered to organized: chaos becomes system, potential becomes delivery, fragments become fullpicture.
The Four Primaries
The favicon establishes the canonical quartet. These four shapes appear in the logo mark and carry the most brand weight. When you need a representative set of four, you use these.
| Position | Shape | Color | Metaphor |
|---|---|---|---|
| Top-left | Drop-point-bl | Orange (#E85D2D) | Direction, initiative — the pointed shape suggests movement and starting |
| Top-right | Squircle | Teal 700 (#1A7A6E) | Structure, engineering — the most "built" shape, stable, architectural |
| Bottom-left | Leaf | Mint (#8FE4D9) | Growth, adaptation — organic, evolving, the living system |
| Bottom-right | Dome-top | Salmon (#F19D7D) | Protection, delivery — the capstone, what ships to the user |
Note: These metaphors are suggestive, not prescriptive. The drop-point doesn't "mean" initiative the way a logo means a company. The association works because of the shape's visual weight and directionality, not because of a legend you need to memorize. If you're building with these shapes and the metaphor helps — use it. If it doesn't — the shapes still work as pure visual elements.
Assembly Patterns
1. Scattered (chaos state)
2. 2×2 Grid (the fullpicture)
3. Single Shape as Bullet
A principle, a phase, an impact point. The shape identifies without elaborating.
4. Paired Shapes (identifier)
5. Floating / Decorative
The Core Metaphor
The transition from scattered to assembled is the brand's visual thesis.
Four shapes scattered = "the problem." Potential energy. Things that could work but don't yet.
Four shapes in a 2×2 grid = "fullpicture." Kinetic energy converted to structure. Things that work.
This transition plays out in the hero animation (chaos → organized), in the philosophy section (day-rate fragments → outcome-based system), and implicitly every time the favicon loads. The 2×2 grid IS the brand mark.
.assembled at 30% visibility. Shapes snap to grid via CSS transitions.Why Not Fixed Meanings?
A system with 16 shapes and 4 colors creates 64 shape-color combinations. Assigning fixed, memorable meanings to 64 elements is impossible — nobody remembers that "teal-700 drop-point-br means API integration."
Instead, meaning emerges from context: In the hero, shapes near the BUILD label represent build capabilities. In a case study, shapes next to phase titles mark progression. In the principles section, shapes are just distinguished bullets.
The same squircle can be "backend engineering" in one context and "Phase 2 indicator" in another. This isn't a bug — it's how real visual systems work. A red circle means "stop" on a road sign and "record" on a microphone. Context determines meaning.
Components
The recurring pieces
These components appear across pages. Their styling is fixed — don't reinvent them.
HOW I WORK
Card title
Card content goes here. Used for sidebar cards, testimonial cards, FAQ tiles.
Dark section headline
White body text on the dark teal background. Used for high-impact areas like the track record banner, impact metrics, and the footer.
Tinted body text on the light teal background. Used for the principles section to create subtle differentiation from cream.
Nicolas delivered exactly what we needed. He understood the problem before we did. The system he built is now core to our operations.
Jane Doe
CEO, Example Co
Shape bullet title
A short description that accompanies the shape bullet. Used to introduce a key point or list item with visual emphasis.
Site Components
The structural pieces
These partials form the site skeleton. They appear on every page via @@include and should never be rebuilt inline. The header and footer are visible at the top and bottom of this very page.
CTA Section
Let's talk about what you're building.
30-minute call. No pitch deck. Just tell me what you're trying to build — I'll tell you how I'd approach it.
AI Toolbar
Content Components
Patterns for content pages
These components are used across guides, comparisons, and resource pages. They follow the same shape-and-color language but are tailored for long-form reading.
Three variants:
- Author — avatar + name
- Reading time — clock icon + duration
- Date — calendar icon + month/year
This guide covers tools like Cursor and Bolt for rapid prototyping.
This is an opinionated take from the author. Use sparingly for first-hand experience.
Highlights a common pitfall or risk the reader should be aware of before proceeding.
Two variants:
- Opinion (teal) — “Builder’s note” for first-hand experience
- Warning (accent) — Pitfalls and risks
TL;DR
The key takeaway lives here. Bold text uses the accent color to draw attention to the most important point on the page.
Custom Build
"I need full control over every pixel."
Best when you have specific UX requirements and a technical team.
SaaS Platform
"I want it working by Friday."
Best when speed matters more than customization.
Hybrid Approach
"Start simple, customize later."
Best when you want quick wins with room to grow.
No-Code
"The team should own it."
Best when non-technical stakeholders need direct control.
Under the hood: How this actually works
This expandable block is a native <details> element. The chevron rotates 90° on open via CSS transition. Teal color family: light teal BG, dark teal icon squircle, teal border.
Use for technical implementation details that only some readers want.
The fine print: What the numbers don’t tell you
These cost estimates assume stable API pricing, which changes quarterly. Factor in a 15–20% buffer for price fluctuations and usage spikes.
Use for caveats, limitations, and edge cases the reader should know about. Amber color family signals caution.
How it works: The data pipeline
Data flows from the source API through a normalisation layer, into a queue, then into the destination system. Each step logs independently so failures are isolated and retryable.
Use for architecture overviews and system-level explanations. Teal color family (informational).
The trade-off: Speed vs. accuracy
A lightweight model handles 95% of cases in under 200ms but misclassifies edge cases. A premium model gets 99.5% accuracy but costs 10× more and adds 2 seconds of latency. Most teams should start light and escalate selectively.
Use for pros/cons analysis and decision trade-offs. Amber color family signals caution.
Deep dive: Why spreadsheets fail at scale
The fundamental issue is that spreadsheets are flat. A customer with 15 orders becomes 15 rows of duplicated data, or a fragile manual reference to another tab. Relational databases solved this in 1970. The fact that most businesses still run on spreadsheets is not a technology problem — it is an awareness problem.
Use for extended background, research deep-dives, or historical context. Accent (orange) color family signals exploration.
Three color families:
- Teal (informational) — Under the hood, How it works
- Amber (cautionary) — The fine print, The trade-off
- Accent (exploratory) — Deep dive
| Approach | Speed | Flexibility |
|---|---|---|
| Custom build | Slow (weeks) | Total control |
| SaaS platform | Fast (days) | Limited |
| Hybrid | Medium | Balanced |
Custom build
SaaS platform
Hybrid
Have a process like this?
I built both of these for the same client. If your team has manual work that should not require a human, let’s talk.
White card, 1px border, 16px radius. Headline: 1.25rem/800. Body: 0.92rem grey-mid. Accent pill button.
Brand shapes float with icta-float keyframes (6s/5s/7s/5.5s staggered). Shapes hidden on mobile. One per page, copy contextualised to the surrounding content.
Two responsive modes:
- Desktop — chip row with dropdown popovers, x-icon reset
- Mobile — bottom sheet with collapsible sections, option chips, count + apply footer
The floating TOC island is visible on this page and on all content pages. It collapses to a pill showing the current section, and expands to reveal all sections with a progress bar. See toc.css for the full implementation.
Icon squircle + label row. Icon: Lucide
compass. Text: 0.88rem/600 in teal-700.One per model subsection as a “when to choose this” anchor.
--color-teal-900) container with 4-column grid (single-column on mobile).Each stat column has a colored 2px top-border accent (coral, teal-500, salmon, teal-300).
Number: clamp(1.6rem, 3vw, 2.2rem)/800 white. Label: 0.72rem/700 uppercase. Desc: 0.78rem muted teal.
Mirrors the
casestudy-metrics pattern from case study pages.- Named team and actual day-to-day operators
- Explicit assumptions, exclusions, and dependencies
- Milestones with clear definition of done
- Testing, QA, release plan, and post-launch support
List items use empty checkbox squares (16×16px, 2px teal-700 border, 3px radius) via
::before instead of bullet dots.Designed for screenshot-able, printable checklists. Pair with an expandable below for detailed explanations.
White card (12px radius, 1px #e5e7eb border). Hover: teal-400 border, 2px lift, soft shadow. Title: 1.05rem/700. Desc: 0.88rem grey-mid. Optional badge: 0.68rem/600 uppercase teal on teal-100 BG.
Linked cards (
a.deeper-card) show a right-aligned → arrow vertically centered. Single card spans full width via :only-child. Grid: 2-col, 1-col on mobile.Partials:
deeper-cards-open/close, deeper-card (linked), deeper-card-soon (coming soon). Badge param accepts raw HTML (<span class=deeper-card-badge>...</span>) or omit for no badge.Auto-injected by
<!-- inject:resource-links --> or <!-- inject:go-deeper --> from resources.js data.Judgment and honesty
Tell me about a project that went wrong.
This reveals honesty, pattern recognition, and whether they take responsibility. The best partners have war stories — and have learned from them.
What would you challenge or cut before building?
The best partners push back. If they agree with everything, they’re either not listening or not experienced enough to spot risks.
How the work actually happens
Who exactly will do the work day to day?
Sales teams pitch senior people. You want names, roles, and a commitment that the people you meet are the people who build.
How do you handle scope changes after work starts?
Scope always changes. What matters is whether the process handles it gracefully or pretends it won’t happen.
Ownership and continuity
What happens after launch?
A good partner has a clear handoff plan. A great one builds the system so your team can own it without them.
Can I see the code and own the repo from day one?
If the answer is no, walk away. You should own every line of code from the start, not at the end of a contract.
Three color families:
- Teal (default) — Judgment, assessment
- Amber — Process, logistics
- Accent — Ownership, continuity
Spacing
Three breathing zones
Not everything gets the same spacing. The page uses three rhythm zones:
Tight (hero, headers): 20–32px between elements. Dense, energetic, confident.
Medium (story, body sections): 48px between blocks. Comfortable reading rhythm.
Generous (evidence, transitions): 64–80px between sections. Room to absorb before moving on.
The transition between zones is the page's heartbeat. A section that's all tight reads as frantic. All generous reads as empty. The mix creates breathing.
| Token | Value | Usage |
|---|---|---|
| Section gap | 80–120px | Between major page sections |
| Block gap (generous) | 64px | Between evidence blocks, before/after dark sections |
| Block gap (medium) | 48px | Between body content blocks within a section |
| Element gap (tight) | 20–32px | Hero elements, card internals, header stacks |
| Component padding (card) | 28–32px | Internal card padding |
| Component padding (section) | 64–80px vertical | Padded sections (dark, tinted) |
Motion
Smooth over flashy
Animation serves comprehension, not decoration. Things move to show relationships — chaos becoming order, a tab revealing content, a card lifting on hover. If an animation doesn't help someone understand something, it shouldn't exist.
- Spring physics over linear easing. Elements should feel like they have mass.
- GPU-accelerated transforms only. Animate transform and opacity. Never animate width, height, top, left, or margin.
- Meaningful transitions. The hero animation tells a story (chaos → system). Tab switches show content replacing content. Hover states confirm interactivity.
- Duration: 200–400ms for micro-interactions (hover, click). 600–1000ms for narrative transitions (hero toggle, tab switch). Nothing over 1.2s.
- No autoplay loops. Animations trigger on interaction or scroll-into-view, then settle. The page at rest is the page at its most confident.
Offering animation specimens
Build: Shapes fly in from outside the frame and snap into the 2×2 grid. Assembly.
Lead: Shapes are already placed. Connection lines trace between them. Coordination.
Lead + Build: Assembly first, then connection lines appear. The full service.
Solve: A path reveals shapes at waypoints, then snaps them into the grid. Discovery → system.
These animations use the same four shapes and same endpoint (2×2 grid). The animation is the differentiator, not the shapes. The destination is always "fullpicture" — how you get there is the service model.
Case Cards
The modular case study card
The .case-card is a single component with a fixed base (header) and optional supplement slots that snap together in different combinations depending on context. The same component serves the index page, the full case study page, and the pricing page — only the slot configuration changes.
Anatomy — the base + 7 slots
Every card starts with a Header (logo + name, always present). On top of that, optional slots are stacked vertically in a fixed order:
| Slot | Class | Purpose |
|---|---|---|
| V — Visual | .case-card-visual | Screenshot or decorative shapes. Sits above the header. |
| H — Header | .case-card-header | Logo + name + optional link/status. Always present. |
| M — Mission | .case-card-mission | One-line project description. |
| Q — Quote | .case-card-quote | Client testimonial with attribution. |
| O — Offering | .case-card-offering | Service type icon (Build / Lead / Lead+Build / Solve). |
| C — Client | .case-card-client | Avatar + name + role attribution row. |
| F — Footer | .case-card-footer | Industry tag + optional ongoing dot indicator. |
| K — KPIs | .case-card-kpis | Dark strip with 2–4 metric columns. Always last. |
Slot progression — from minimal to maximal
The card grows as you add slots. Each row below adds one more supplement to demonstrate how the component scales.
H
H + M
Rebuilding a 10-year legacy e-commerce app with a deep customization engine
H + M + Q(c)
Rebuilding a 10-year legacy e-commerce app with a deep customization engine
He ended up costing me the least overall, due to his speed and effectiveness.

H + M + C + F
Rebuilding a 10-year legacy e-commerce app with a deep customization engine

H + M + O + K
Rebuilding a 10-year legacy e-commerce app with a deep customization engine
H + M + Q(c) + O + K
Rebuilding a 10-year legacy e-commerce app with a deep customization engine
He ended up costing me the least overall, due to his speed and effectiveness.

Selected integration: Index page — V + H + M + C + F
Used on /case-studies/. Visual showcase with mission, client attribution, and industry footer. Quote variant C for the tinted inset style. The visual slot accepts either a screenshot (img) or decorative shapes (.case-card-visual--shapes) for placeholder cards.
Rebuilding a 10-year legacy e-commerce app with a deep customization engine, pair-programming directly with the founder

Selected integration: Full card — H + M + Q(c) + O + K
Used in the "Explore more" sections at the bottom of individual case study pages. Quote variant C (tinted background). Offering shapes match the final animation state for each service type. KPIs anchor the bottom in a dark strip.
Rebuilding a 10-year legacy e-commerce app with a deep customization engine, pair-programming directly with the founder
While he may have had the highest hourly rate I've ever paid, he ended up costing me the least overall, due to his speed and effectiveness.

Offering cards
Each offering type is represented by a card with its animated shape group. These cards link to the corresponding section on the pricing page.
Ongoing indicator
Active collaborations show a pulsing green dot in the card footer. Hover reveals a tooltip. Uses @keyframes pulse-ongoing with a 2s ease-in-out loop.
Rebuilding a 10-year legacy e-commerce app with a deep customization engine
@keyframes pulse-ongoing with a 2s ease-in-out loop.Agency badge — logo swap
When work was delivered through an agency, the logo slot becomes an interactive .agency-badge. Two same-size logo pills are stacked: the client logo on top, the agency logo tucked behind offset 6px down-left — just enough of its edge peeking out as a curiosity hook. Clicking swaps the deck (300ms ease-out) and reveals a popover with agency details. Dismisses on outside click or Escape.
H + M + F (via Drakkar)
Led 2 junior devs to ship a Swiss farm marketplace v1, then returned to build cross-platform data sync with their backoffice
H + M (direct — for comparison)
Shipping 1,000+ personalized kids' science magazines for Christmas, then maintaining and evolving the platform
Resource Cards
The content index card
The .ri-card is used on the resources index page to link to guides and comparisons. It follows the same white-card-on-cream pattern as case cards but is simpler: title, description, optional tool icons, and metadata pills.
Anatomy — guide card vs comparison card
Guide cards show author + reading time + date. Comparison cards add a row of tool icons before the metadata. Both hover to teal border with a slight lift.
Guide
How to choose a technical partner for your startup
A framework for evaluating freelancers, agencies, and CTOs-for-hire when you need to build but can't recruit yet.
Comparison (with tool icons)
Cursor vs Bolt vs Lovable — which AI builder fits your project?
A side-by-side breakdown of three AI-first coding tools, tested on real client projects.
Card styling rules
Container: White background, 1px border (#e5e7eb), border-radius 12px, subtle shadow (0 1px 3px rgba(0,0,0,0.04)).
Hover: Border transitions to teal-400, translateY(-2px) lift, enhanced shadow.
Title: 1.05rem, weight 700, letter-spacing -0.02em. Padded 16px 20px from top/sides.
Description: 0.88rem, weight 400, grey-mid. flex:1 so it pushes metadata to the bottom.
Tool icons: 32×32px squares, border-radius 8px, with centered logo images (14px height) or bold letter fallback.
Metadata: Uses the shared .meta-pills component. Separated from body by a 1px #f0f0f0 top border.
Data-Driven Components
Inject-rendered patterns
These components are rendered at build time by site-plugin.js from data in src/data/cards.js and src/data/interactive-diagrams.js via <!-- inject:KEY --> markers.
Budget Cards
CRM entry, auto-reply, team notification. When a lead comes in, the clock starts.
Generation and follow-up reminders. At 200 invoices per month, the savings add up fast.
Folder creation, welcome emails, access provisioning. Make the computer do the checklist.
Action item extraction and assignment. 20 minutes per meeting adds up across a team.
Data aggregation and formatting. If only the numbers change, this is automation at its most straightforward.
<!-- inject:cards KEY --> with type budget-card.PF Cards
How often does this task happen? Daily tasks compound savings fastest.
How long does it take each time? People underestimate — go time it.
What happens when someone does it wrong? Billing errors cost more than typos.
<!-- inject:cards KEY --> with type pf-card.Proof Cards

A CEO’s fast-moving ideas shipped as production tools every 2 weeks — no overhead, just results.
<!-- inject:cards KEY --> with type proof-case.Interactive Diagram
<!-- inject:interactive-diagram KEY -->.
Nicolas Filzi