laba-laba is an AI spider solver for image puzzles. The operator uploads a puzzle image — the first, unsolved picture — and the system genuinely solves it, producing a result that corresponds to the expected solved image (the second picture). The product is not a canned demo: the same pipeline must work when the operator uploads a different puzzle.
The defining experience is watching the work happen. A designed spider and its visual environment perform the solving, and a detailed terminal log records the step-by-step process. The audience is a technically literate operator who wants to observe a real computation — a laboratory readout crossed with an art installation — and who judges the output by comparing the produced solution against the puzzle they submitted.
This document covers the current delivery: the public entry, puzzle intake, the real solve, the spider animation, the terminal log, and the solution result.
laba-laba is a first-party web application with a custom UI. It consists of a browser-facing surface and a backend that performs the actual puzzle solving.
Actors
Accepted behavior
Ownership and access
All six surfaces are application-owned custom pages with no access requirement: the operator can reach the Landing, Upload Puzzle, Solve, Spider Animation, Terminal Log, and Solution Result surfaces without establishing an account. No identity, sign-in, or account-management capability is part of this product.
Narrow exclusions
laba-laba is delivered as a first-party web application. The operator works entirely in the browser: they land on a public entry surface, upload a puzzle image, start a solve, watch the spider and the terminal while the backend works, and then compare the produced solution against their original upload.
The solving itself is owned by the application's own backend. The uploaded puzzle's pixels drive the pipeline; the frontend renders the spider's motion and the terminal lines from real solver events emitted during the run, not from a timer or a pre-recorded sequence. This is the boundary that makes the product's core promise true: a different puzzle produces a different run, different log lines, and a different solution image.
Access is open. There is no account, no sign-in, and no per-user state that must be privately owned or resumed across sessions. The current delivery horizon covers the six surfaces above and nothing beyond them. Future ideas are not part of this delivery and are not represented in any page or acceptance criterion.
FR-1 — Provide a puzzle image before solving (explicit; required_inference for the intake step) As a Puzzle Solver Operator, I should provide a puzzle image before starting a solve, so that the solver has the first, unsolved picture to work on.
FR-2 — Start a real solve on the submitted puzzle (explicit) As a Puzzle Solver Operator, I should start the AI spider solver on my submitted puzzle, so that a solved result is produced from my image.
FR-3 — Genuinely solve each newly uploaded puzzle, not a simulation (explicit; hard constraint) As a Puzzle Solver Operator, I should get a genuine solve of whatever puzzle I upload, so that the result reflects my image rather than a fixed demo.
FR-4 — Watch the designed spider perform the solving work (explicit) As a Puzzle Solver Operator, I should watch the designed spider and its visual environment perform the solving work, so that I can see the process happening rather than only its outcome.
FR-5 — Read a detailed terminal log of the solving process (explicit) As a Puzzle Solver Operator, I should read a detailed terminal/console log showing the step-by-step solving process, so that I can follow exactly what the solver did.
FR-6 — Keep the spider animation and terminal log available during the solve (required_inference) As a Puzzle Solver Operator, I should keep the spider animation and the terminal log available while the solve is in progress, so that I can observe the work continuously from start to finish.
FR-7 — Compare the generated result with the original input image (required_inference) As a Puzzle Solver Operator, I should see the generated solved image alongside the original uploaded puzzle, so that I can judge whether the solution matches the expected solved result.
Product context. The operator is technically literate and treats laba-laba as an instrument rather than a service. They arrive with a puzzle image of their own — a jigsaw reconstruction, a scrambled-tile puzzle, or a sliding puzzle — and an expectation of what the solved picture should look like. They are not looking for a friendly assistant; they are looking for a real computation they can watch and audit.
Primary goal. To upload their own puzzle and obtain a genuine solved image that they can compare against the expected solved result, while observing the process that produced it.
Distinct accepted responsibilities.
Relevant inputs and decisions. The puzzle image file; the decision to submit, cancel, or restart a run; the decision of whether the produced solution is acceptable; the decision to try a different puzzle.
Interactions with other accepted participants. The operator's only counterpart is the solver backend and its computer-vision pipeline, which is a system actor rather than a persona. The operator initiates every run and receives every result; there is no other human participant in this product.
Observable success. The operator sees a solved image that corresponds to the expected solved picture, produced from their own upload, with a terminal log whose lines reflect the actual stages and counts of that run — and the same holds when they upload a different puzzle.
What makes this role distinct. The operator is simultaneously the input provider, the observer, and the judge. Their work is not to configure or administer anything; it is to supply a puzzle, watch a real process unfold, and evaluate its output. That combination — supplying the data, watching the computation, and adjudicating the result — is the whole of the role.
Failure and recovery. If the run fails at any stage, the failing stage is identified on Solve, the spider halts at that stage with the web left in its partial state, and the failing line with its reason appears in Terminal Log. The operator can start a new run on the same puzzle or a different one without losing the failure information.
Continuation. The operator either accepts the result or starts a new solve.
Failure and recovery. If the new puzzle cannot be solved, the run fails with the failing stage and reason stated, and the operator can try yet another puzzle.
Continuation. The operator repeats this flow for as many puzzles as they wish to test.
Continuation. The operator proceeds with a new run.
The creative direction is authoritative for this section. The muse is Refik Anadol: data made physical, a spider that weaves the solution out of the puzzle's own pixels. The headline register is a live instrument performing computation — between a laboratory readout and an art installation.
Palette (dark mode)
| Role | Token | Hex |
|---|---|---|
| Background (gallery ground) | --bg | #05060A |
| Surface (terminal, controls) | --surface | #0C0E16 |
| Text (primary) | --text | #F2F4F8 |
| Primary (interactive elements) | --primary | #7BE0C8 |
| Accent (active solve state only) | --accent | #FF7A45 |
| Muted (timestamps, inactive labels, hairline rules) | --muted | #6B7280 |
| Web flow — teal | --flow-teal | #7BE0C8 |
| Web flow — violet | --flow-violet | #9B8CFF |
| Web flow — amber | --flow-amber | #FFB86B |
The generative web is drawn in a luminous multi-hue flow from teal through violet to warm amber, derived from the uploaded puzzle's own dominant colors, so the hero's palette changes per puzzle. #7BE0C8 is the fixed primary for interactive elements. #FF7A45 is the single hot accent, reserved for the active solve state — progress, the running cursor, the one live number. Body-size text never sits on the luminous flow; muted #6B7280 is for timestamps, inactive labels, and hairline rules only.
Typography
clamp); h1 40/64; h2 28/40; h3 20/24; body 16/17; micro-label 11/12 uppercase; terminal 13/14 mono.Shape language. Full-bleed generative canvas with soft organic curves; the web is drawn as continuous bezier threads, never segmented. Panels are rectangular with 2px corners and 1px hairline borders at low opacity — the UI is a thin instrument overlay on the flow, not a set of rounded cards. Controls are pill-shaped only where they are primary actions; everything else is a sharp rectangle. No drop shadows, no glassmorphism blur on main panels; depth comes from layered opacity and the web's own parallax.
Layout. Single-column, museum-like: a full-viewport generative hero at the top with a minimal overlay (wordmark left, one-line status right, primary CTA bottom-left), then generous vertical spacing before the workflow sections. The solve page is a split: the spider canvas occupies ~62% on desktop and the terminal log ~38%, stacked on mobile with the canvas first and the terminal scrollable beneath. The result page is a two-up comparison (original puzzle left, solved image right) on desktop, stacked on mobile, with a thin ruled metadata strip beneath each image. All content sits inside a 1280px max-width container with 24px gutters at 375px and 48px at 1280px.
Imagery. No stock photography, no 3D product renders, no clip art. The only imagery is generative and derived from the operator's own uploaded puzzle: the web is a particle-and-thread field seeded by the puzzle's edge map and color histogram, and the solved output is the operator's actual reconstructed image. Decorative elements are the flow itself plus thin topographic contour lines and faint grid ticks in the background. The logo is a typographic wordmark "laba-laba" set in Space Grotesk with a small drawn spider glyph built from the same bezier thread language as the web.
Avoid. No blue/indigo primary or accent (#2563EB, #4F46E5, #6366F1 and neighbours). No Inter, Roboto, Arial, Helvetica, Open Sans, Lato, Poppins, or system-ui for headings or body. No gradient-blob hero and no grid of identical hover-lift cards. No glassmorphism panels with heavy backdrop blur over the flow. No canned or looping demo animation presented as a solve. No decorative 3D spider that moves independently of the actual solve events. No photography of people, no stock imagery, no clip art. No centered headline + subtext + button stack in the hero.
The web is the puzzle. On the public entry, a full-bleed near-black canvas fills the first viewport. Dominating it is a slowly drifting generative web of luminous particles and bezier threads, seeded by a sample puzzle image and flowing in teal → violet → amber. A single oversized headline in Space Grotesk — 56px at 375px, 96px at 1280px — sits flush-left and low in the frame, spanning up to 9 columns, reading "Upload a puzzle. Watch the spider solve it." The primary CTA "Upload puzzle" is a solid teal pill pinned directly beneath the headline's baseline; a secondary text link "How the solver works" sits to its right. In the top-left corner, the laba-laba wordmark with its spider glyph; top-right, a live status line in IBM Plex Mono reading solver: idle · model: ready. No centered stack, no gradient blob, no subheadline paragraph — the web is the subject.
The concept carries through the whole product as one continuous generative surface. The same web that fills the hero contracts into a horizontal band behind each section heading on scroll, so the page reads as a single surface rather than a sequence of cards. On the solve page, the web is re-seeded from the operator's own uploaded puzzle — its edge map and dominant colors determine the thread paths and the flow's hue range — so every puzzle produces a visibly different hero and solve scene. The spider is not a mascot sprite but a live agent: it steps along the web in sync with real solver pipeline events (segment, match, place, verify), and each placed fragment sends a visible thread from the fragment to its solved position. The terminal log is a real instrument readout — monospace, timestamped, with the currently-executing line highlighted in #FF7A45 — typing out lines as the solver actually emits them, including real elapsed times and real per-stage counts. The result page is a two-up comparison with a thin ruled metadata strip beneath each image (fragment count, match confidence, elapsed ms), styled like a museum label rather than a dashboard card.
Interaction Model: Animated Motion Tempo: cinematic Hero Dimensionality: webgl
Landing Hero Motion Brief
Landing Hero 3D Scene Brief — DIRECTION-DERIVED
A real-time WebGL scene renders the web as a compact three-dimensional field: a particle-and-thread structure whose vertices are seeded from the sample puzzle's edge map and whose thread colors are sampled from its dominant-color histogram. The scene shows the product's defining state — a puzzle's own data rendered as a physical, luminous web that a spider agent traverses. Depth is expressed through layered opacity and parallax rather than heavy post-processing; the UI overlay stays a thin opaque instrument layer above the flow, never blurred into it. The scene is the hero subject, not decoration: when a real solve is running, the same scene is driven by actual solver events rather than an independent loop.
NFR-1 — Real solving, not simulation (explicit; hard constraint) The solver must genuinely process each newly uploaded puzzle. It must not replay a fixed demo, and no canned or looping animation may be presented as a solve. Every motion on the solve page must be driven by real solver state. Rationale: the operator's stated requirement is that the product works when they upload other puzzles.
NFR-2 — Event-driven animation and logging (explicit) The spider's motion and the terminal's lines must be bound to real solver events — pipeline stages, match results, per-stage counts, and elapsed times — rather than to a timer or a pre-recorded sequence. Rationale: the operator must be able to watch and read a real process.
NFR-3 — Detailed, timestamped log (explicit) The terminal log must be detailed and step-by-step, with timestamps, stage transitions, per-stage counts, and elapsed times, and must remain readable after the run completes. Rationale: the operator explicitly requested a detailed terminal log of the work.
NFR-4 — Continuous availability of the observation surfaces during a run (required_inference) The spider animation and the terminal log must both remain available and updating for the duration of a run, and neither may replace the other. Rationale: the operator must be able to observe the work continuously from start to finish.
NFR-5 — Result comparison (required_inference) The generated solved image must be presented alongside the original uploaded puzzle so the operator can judge the result against the expected solved image. Rationale: the operator's stated goal is to obtain a result corresponding to the second, solved picture.
NFR-6 — Readable text and controls at every viewport (explicit direction constraint)
Headlines, wordmarks, labels, numbers, card text, and controls must stay entirely inside the viewport and their container at 375px, 768px, and 1280px, wrapping or scaling to fit, and no other element may cover any part of them. Imagery, decoration, and motion may be cropped, bled off an edge, rotated, overlapped, or cut as the direction asks, provided they cover no readable text or control. With prefers-reduced-motion, a usable static arrangement must be provided.
NFR-7 — Reduced-motion support (explicit direction constraint)
Under prefers-reduced-motion, the flow freezes to a static rendered frame, the spider holds a pose, and the terminal prints lines without the typing animation, while all content remains usable.
webgl hero dimensionality.Assumptions
Constraints
#2563EB, #4F46E5, #6366F1 and neighbours); the palette is teal, violet, and amber on near-black. (explicit, binding)No completed page designs yet.
Completed design pages will appear here when they are ready to preview.
No completed page designs yet.
Completed design pages will appear here when they are ready to preview.
No comments yet. Be the first!