Page 1 of 15
System Requirements Document for dawn-politacalposter
1. Introduction
dawn-politacalposter is a single-operator political poster creation tool. One creator supplies a portrait photograph and a political message, and the product produces a finished political poster built from that portrait and that message. The product intent is civic, urgent, and declarative: this is a persuasion instrument, not a productivity suite. The interface is designed to read as a printing press with an opinion — the product itself looks like the artefact it produces.
The audience is a private individual, activist, or campaign worker who wants to turn a person's portrait and a political message into a shareable poster. The uploaded portrait photograph is the intended subject image for the poster and is treated as a screen-print plate rather than a photograph.
Page 2 of 15
2. System Overview
The current delivery is a first-party custom web application with five ordered destinations: Landing, Image, Message, Poster Studio, and Poster Preview. All five are application-owned custom pages with no access requirement, forming a single anonymous, continuous creation session for one active human actor.
The single active human actor is the Political Poster Creator. The creator moves through a four-step press run — IMAGE → MESSAGE → STUDIO → PREVIEW — supplying a portrait image, supplying a political message, generating the poster, and reviewing the result. Poster generation must complete before the generated poster can be viewed or regenerated.
Narrow exclusions: no account system, no multi-user collaboration, no campaign management, no scheduling or publishing to external platforms, no stock photography, no illustration, no 3D imagery, and no decorative iconography. Type and colour blocks are the only imagery beyond the creator's own portrait.
Page 3 of 15
2a. Product Interpretation and Delivery Boundary
The product is delivered entirely as a first-party browser application. Every destination is anonymously reachable; the creator is never asked to establish an account, and no durable identity is required because the accepted journey is a single continuous session from portrait to finished poster. Nothing in the accepted requirements establishes differentiated permissions, role-based visibility, or shared product state between multiple humans, so no permission model is introduced.
The current horizon covers exactly the five accepted destinations and the poster lifecycle they carry: supply portrait, supply message, generate, view, regenerate. Future ideas — additional poster formats, saved poster libraries, sharing or export to external platforms, and multi-poster campaign management — are explicitly out of current scope and appear only in the future section.
2b. Source Content Inventory
The authoritative content source for this project is the uploaded portrait photograph:
- Media reference:
chat_media/550e32e9-2ca0-4cbb-af21-0de0a09e6223/b4f07c37_6d70ad8d-5ed0-4954-9dba-478a92bfdc78.png
- Role: The intended subject image for the political poster. It is the only photograph in the product.
- Verified visual content: A head-and-shoulders portrait of a single person facing the camera directly, centred in frame, with a neutral expression. The subject has short dark hair, a full dark beard and moustache, and is wearing a light grey hooded sweatshirt with a visible zipper at the collar. The background is a soft, out-of-focus interior with warm brown tones on the left and a blurred green plant element on the right. Lighting is even and frontal, with the face fully lit and clearly separated from the background.
- Treatment in product: This image is never displayed as a full-colour photograph. It is always rendered as a hard-threshold duotone plate (black plus one spot colour) and cropped to a rectangle that overlaps the type plane.
No other verified factual entities, collections, dates, contacts, or links are supplied by the content source.
2c. Page Content and Component Coverage
Page 4 of 15
Landing
- Information and state: The public entry surface. It explains that the product creates political posters from a portrait and a political message. It carries no user-specific state and no persisted data.
- Primary action: Begin a poster — enter the creation flow at the Image step.
- Supporting actions: Read the press-run step strip to understand the four-step sequence.
- Domain entities: None persisted. The step strip names the four steps: IMAGE, MESSAGE, STUDIO, PREVIEW.
- Component responsibilities:
- Full-bleed hero type composition: left cream field carrying the stacked headline MAKE / YOUR / POSTER in Anton, flush-left, with the word POSTER set in Scher-red.
- A 4-degree diagonal red band running from the left edge to the right, cutting the baseline of the word POSTER and carrying the sub-line FROM A PORTRAIT AND A MESSAGE in Archivo SemiBold uppercase, letterspaced, set in cream.
- Right black block, full height, containing the hard-cropped duotone portrait plate bleeding off the right edge of the viewport.
- A yellow 3px vertical rule between the cream and black fields.
- A black numbered strip reading 01 IMAGE 02 MESSAGE 03 STUDIO 04 PREVIEW in Archivo 12px.
- A single rectangular red CTA slab, START A POSTER →, with a 2px black outline and flat fill.
- States:
- Loading: Not applicable — the entry surface is static type and colour blocks.
- Empty: The default state; no poster exists yet.
- Success: The creator activates the CTA and arrives at the Image step.
- Error: Not applicable at this surface.
- Recovery: Not applicable at this surface.
Page 5 of 15
Image
- Information and state: Step 01 of the press run. Holds the portrait image the creator intends to use in the poster. The step strip shows 01 IMAGE as the active red block.
- Primary action: Supply the portrait image.
- Supporting actions: Replace a supplied image before continuing; continue to the Message step.
- Domain entities: The portrait image (the uploaded portrait photograph, or another portrait the creator supplies).
- Component responsibilities:
- Oversized step headline in Anton 68px in the left column, with the instruction beneath it.
- Right column input slab for supplying the portrait image.
- Duotone preview of the supplied portrait, rendered as a hard-threshold plate rather than a full-colour photograph.
- Press-run step strip pinned under the header, with 01 IMAGE as the active red block.
- Continue control advancing to the Message step.
- States:
- Loading: The supplied image is being read and prepared for duotone rendering.
- Empty: No portrait supplied yet; the input slab is presented with the instruction.
- Success: A portrait is supplied and shown as a duotone plate; the creator can continue.
- Error: The supplied file cannot be read as an image, or no portrait has been supplied when the creator attempts to continue.
- Recovery: The creator supplies a different portrait file and the duotone preview re-renders.
Page 6 of 15
Message
- Information and state: Step 02 of the press run. Holds the political message that will appear on the poster. The step strip shows 02 MESSAGE as the active red block and 01 IMAGE as a completed black block with a cream numeral.
- Primary action: Enter the political message.
- Supporting actions: Edit the message before continuing; return to the Image step; continue to the Poster Studio.
- Domain entities: The political message text.
- Component responsibilities:
- Oversized step headline in Anton 68px in the left column, with the instruction beneath it.
- Right column input slab for the political message, filled in poster-yellow.
- Live type preview of the message set in Anton at poster scale over a colour field.
- Press-run step strip with 02 MESSAGE active.
- Continue control advancing to the Poster Studio.
- States:
- Loading: Not applicable — text entry is immediate.
- Empty: No message entered; the input slab is presented with the instruction.
- Success: A message is entered and previewed in poster type; the creator can continue.
- Error: No message has been entered when the creator attempts to continue.
- Recovery: The creator enters or edits the message and the type preview updates.
Page 7 of 15
Poster Studio
- Information and state: Step 03 of the press run. The generation stage. It holds the supplied portrait and the entered message and produces the political poster. The step strip shows 03 STUDIO as the active red block.
- Primary action: Generate the political poster from the supplied portrait and message.
- Supporting actions: Return to the Image or Message step to change inputs; choose a poster preset tile; regenerate.
- Domain entities: The generated poster; the supplied portrait; the entered message; the selected poster preset.
- Component responsibilities:
- Full-bleed black stage with the poster area centred at 60vh.
- Ruled control rail on the right carrying the Generate action and poster preset tiles.
- Poster preset tiles, with the selected tile filled in poster-yellow.
- Press-run step strip with 03 STUDIO active.
- Press-run generation animation: the poster area cycles through four flat ink layers (cream → red → yellow → black) over 1.2s before the finished poster settles, with the portrait duotoned in the final layer.
- States:
- Loading: The press-run animation runs for 1.2s while the poster is generated.
- Empty: No poster generated yet; the stage shows the poster area awaiting generation.
- Success: The finished poster settles on the stage and the creator can proceed to the Poster Preview.
- Error: Generation does not complete, or a required input (portrait or message) is missing.
- Recovery: The creator returns to the Image or Message step to supply the missing input, or re-runs generation from the Studio.
Page 8 of 15
Poster Preview
- Information and state: Step 04 of the press run. Displays the generated poster for review. The step strip shows 04 PREVIEW as the active red block and prior steps as completed black blocks.
- Primary action: Review the generated poster.
- Supporting actions: Regenerate the poster when the result is not acceptable; return to the Poster Studio.
- Domain entities: The generated poster; poster metadata — size, format, generated-at, message word count.
- Component responsibilities:
- The generated poster displayed at poster scale, up to 720px wide.
- A 4-degree diagonal red band slicing across the Preview header.
- The duotone portrait plate whose top edge overlaps the headline baseline, so the person and the message occupy the same plane.
- A ruled poster colophon below the poster: a 3px black rule followed by a tabular block in Archivo 12px uppercase letterspaced — SIZE / FORMAT / WORDS / GENERATED — aligned label-left, value-right.
- Regenerate control.
- States:
- Loading: The poster is being prepared for display at poster scale.
- Empty: No poster exists to preview; the creator is directed back to the Poster Studio.
- Success: The generated poster is displayed at poster scale with its colophon.
- Error: The poster cannot be displayed.
- Recovery: The creator regenerates from the Poster Studio and returns to the Preview.
Page 9 of 15
3. Functional Requirements
FR-1 — Begin a poster from the public entry
As a Political Poster Creator I should be able to begin a poster from the public entry surface so that I can start the creation flow without any setup.
- Provenance: explicit (product commitment) / required_inference (entry mechanics)
- Trigger or input: The creator activates the START A POSTER → CTA on the Landing surface.
- Observable result: The creator arrives at the Image step, with 01 IMAGE shown as the active red block in the press-run step strip.
- Access state: Anonymous; no account required.
- Failure and recovery: Not applicable — the entry surface is static and always available.
- Continuation: The creator supplies a portrait image.
FR-2 — Supply the portrait image
As a Political Poster Creator I should be able to supply the portrait image so that the poster features the person I intend.
- Provenance: explicit (the uploaded portrait is the intended subject image) / required_inference (the portrait must be supplied before generation)
- Trigger or input: The creator supplies a portrait image on the Image step.
- Observable result: The supplied portrait is shown as a hard-threshold duotone plate, and the creator can continue to the Message step.
- Access state: Anonymous; no account required.
- Failure and recovery: If the supplied file cannot be read as an image, the creator is told and supplies a different file; the duotone preview re-renders.
- Continuation: The creator continues to the Message step.
FR-3 — Enter the political message
As a Political Poster Creator I should be able to enter the political message so that the poster carries the text I want to communicate.
- Provenance: required_inference (the message must be entered before generation)
- Trigger or input: The creator enters the political message on the Message step.
- Observable result: The message is previewed in poster type, and the creator can continue to the Poster Studio.
- Access state: Anonymous; no account required.
- Failure and recovery: If no message has been entered when the creator attempts to continue, the creator is told and enters or edits the message; the type preview updates.
- Continuation: The creator continues to the Poster Studio.
FR-4 — Generate the political poster
As a Political Poster Creator I should be able to generate the political poster from the supplied portrait and message so that I obtain a finished poster.
- Provenance: explicit (product commitment) / required_inference (generation must complete before viewing)
- Trigger or input: The creator activates Generate on the Poster Studio, with a portrait supplied and a message entered.
- Observable result: The press-run animation cycles through four flat ink layers (cream → red → yellow → black) over 1.2s, then the finished poster settles on the black stage with the portrait duotoned in the final layer.
- Access state: Anonymous; no account required.
- Failure and recovery: If generation does not complete, or a required input is missing, the creator is told and returns to the Image or Message step to supply the missing input, or re-runs generation from the Studio.
- Continuation: The creator proceeds to the Poster Preview.
FR-5 — View the generated poster
As a Political Poster Creator I should be able to view the generated poster so that I can judge whether it is usable for sharing.
- Provenance: required_inference (generation must complete before the poster can be viewed)
- Trigger or input: The creator arrives at the Poster Preview after generation completes.
- Observable result: The generated poster is displayed at poster scale, up to 720px wide, with the duotone portrait plate overlapping the headline baseline and a ruled colophon below showing SIZE / FORMAT / WORDS / GENERATED.
- Access state: Anonymous; no account required.
- Failure and recovery: If no poster exists to preview, the creator is directed back to the Poster Studio; if the poster cannot be displayed, the creator regenerates from the Studio and returns.
- Continuation: The creator either accepts the poster or regenerates it.
FR-6 — Regenerate the poster when the result is not acceptable
As a Political Poster Creator I should be able to regenerate the poster when the result is not acceptable so that I can reach a poster I am willing to use.
- Provenance: required_inference (regeneration is supported once generation has completed)
- Trigger or input: The creator activates Regenerate on the Poster Preview, or returns to the Poster Studio and activates Generate again.
- Observable result: A new poster is produced from the same supplied portrait and message, and the Preview updates with the new result and its colophon.
- Access state: Anonymous; no account required.
- Failure and recovery: If regeneration does not complete, the creator is told and can re-run generation from the Studio.
- Continuation: The creator reviews the new result and either accepts it or regenerates again.
FR-7 — Change the supplied inputs before generating
As a Political Poster Creator I should be able to change the supplied portrait or message before generating so that the poster reflects what I actually want.
- Provenance: required_inference (the Image and Message steps precede generation and remain reachable)
- Trigger or input: The creator returns to the Image or Message step from the Poster Studio or the step strip.
- Observable result: The changed portrait or message is reflected in the step's preview and is used by the next generation.
- Access state: Anonymous; no account required.
- Failure and recovery: If a changed input cannot be read, the creator is told and supplies a valid input.
- Continuation: The creator returns to the Poster Studio and generates again.
Page 10 of 15
4. User Personas
Page 11 of 15
Political Poster Creator
Product context. The Political Poster Creator is a single active human who wants to produce political posters featuring a person's portrait. The role is inferred from the user's handle "politacalposter" and the uploaded portrait photograph, which together indicate one operator working alone on a persuasion artefact rather than a team operating a campaign platform. The creator works in a single continuous session: there is no account, no saved library, and no handoff to another human.
Primary goal. A finished political poster built from the creator's own photo and text, good enough to be shared.
Distinct accepted responsibilities. The creator's recurring responsibility is supplying the portrait image and the poster's political message, then generating and reviewing the resulting poster until it is usable. This is different from a designer's work (no layout authoring is offered — the composition is produced by the tool) and different from a campaign manager's work (no scheduling, targeting, or distribution is offered). The creator's judgement is exercised at exactly two points: what the portrait and message should be, and whether the generated poster is acceptable.
Relevant inputs and decisions. The creator supplies a portrait image and a political message. The creator decides whether the generated poster is acceptable or must be regenerated, and decides whether to change the supplied portrait or message before generating again.
Interactions with other accepted participants. There are none. No other accepted human participant exists in the current scope; the poster is produced for the creator's own use. No counterparty, recipient, or beneficiary is established by the accepted requirements.
Observable success. A generated political poster displayed at poster scale on the Poster Preview, built from the creator's own portrait and message, with its colophon showing size, format, word count, and generation time.
Page 12 of 15
5. Core User Flows
Flow 1 — Create a political poster from a portrait and a message
- Starting context. The Political Poster Creator arrives at the Landing surface with no prior state. Nothing is centred and nothing floats; the screen reads as a printed broadside.
- On Landing, the creator reads the stacked headline MAKE / YOUR / POSTER, with POSTER set in Scher-red and its baseline cut by the 4-degree diagonal red band carrying FROM A PORTRAIT AND A MESSAGE. The black numbered strip reads 01 IMAGE 02 MESSAGE 03 STUDIO 04 PREVIEW.
- The creator activates the red CTA slab START A POSTER →.
- Observable result. The creator arrives at the Image step; the press-run step strip shows 01 IMAGE as the active red block.
- On Image, the creator reads the oversized Anton step headline and instruction in the left column, then supplies the portrait image in the right-column input slab.
- Observable result. The supplied portrait appears as a hard-threshold duotone plate — black plus one spot colour — not as a full-colour photograph.
- Failure and recovery. If the supplied file cannot be read as an image, the creator is told and supplies a different file; the duotone preview re-renders.
- The creator continues to the Message step. The step strip shows 01 IMAGE as a completed black block with a cream numeral and 02 MESSAGE as the active red block.
- On Message, the creator enters the political message in the poster-yellow input slab.
- Observable result. The message is previewed in Anton at poster scale over a colour field.
- Failure and recovery. If no message has been entered when the creator attempts to continue, the creator is told and enters or edits the message; the type preview updates.
- The creator continues to the Poster Studio. The step strip shows 03 STUDIO as the active red block.
- On the Poster Studio, the creator reviews the full-bleed black stage with the poster area centred at 60vh and the ruled control rail on the right, and selects a poster preset tile if desired. The selected tile fills in poster-yellow.
- The creator activates Generate.
- Observable result. The press-run animation cycles the poster area through four flat ink layers — cream → red → yellow → black — over 1.2s, then the finished poster settles, with the creator's portrait duotoned in the final layer.
- Failure and recovery. If generation does not complete, or a required input is missing, the creator is told and returns to the Image or Message step to supply the missing input, or re-runs generation from the Studio.
- The creator proceeds to the Poster Preview. The step strip shows 04 PREVIEW as the active red block.
- Observable result. The generated poster is displayed at poster scale, up to 720px wide, with the duotone portrait plate's top edge overlapping the headline baseline so the person and the message occupy the same plane. Below it, a 3px black rule and a tabular colophon in Archivo 12px uppercase letterspaced show SIZE / FORMAT / WORDS / GENERATED, aligned label-left, value-right.
- Next step. The creator either accepts the poster or moves to Flow 2.
Page 13 of 15
Flow 2 — Regenerate the poster when the result is not acceptable
- Starting context. The Political Poster Creator is on the Poster Preview, looking at a generated poster that is not acceptable.
- The creator activates Regenerate on the Poster Preview, or returns to the Poster Studio and activates Generate again.
- Observable result. A new poster is produced from the same supplied portrait and message. If generation runs on the Studio, the press-run animation cycles through the four flat ink layers over 1.2s before the new result settles; the Preview then updates with the new poster and its colophon.
- Failure and recovery. If regeneration does not complete, the creator is told and can re-run generation from the Studio.
- Next step. The creator reviews the new result and either accepts it or regenerates again.
Flow 3 — Change the supplied inputs before generating again
- Starting context. The Political Poster Creator is on the Poster Studio or the Poster Preview and wants the poster to reflect a different portrait or a different message.
- The creator returns to the Image or Message step using the press-run step strip.
- On Image, the creator supplies a different portrait; the duotone preview re-renders. On Message, the creator edits the political message; the type preview updates.
- Failure and recovery. If a changed input cannot be read, the creator is told and supplies a valid input.
- Observable result. The changed portrait or message is reflected in the step's preview and is used by the next generation.
- Next step. The creator returns to the Poster Studio and generates again, then reviews the result on the Poster Preview.
6. Visuals Colors and Theme
The authoritative creative direction is Paula Scher — typography as architecture: a political poster press built from stacked words and colliding colour blocks. The headline is that the product itself IS the poster, so the interface must look like the artefact it produces.
Page 14 of 15
Colour tokens (light mode)
| Role | Hex | Application |
|---|
| Background | #F2EDE4 | Newsprint-cream ground — the poster stock and default reading surface |
| Surface | #0E0E0E | Near-black ink; also the full-bleed Poster Studio dark stage |
| Text | #0E0E0E | Near-black ink type on cream |
| Primary | #D7261E | Scher-red — hero block, primary CTAs, the Generate action, the active step marker |
| Accent | #F5C400 | Poster-yellow — the message input field, the selected poster-preset tile, the highest-emphasis status pill |
| Muted | #7A736A | Captions, metadata, disabled states |
Ratio: cream 55%, black 25%, red 12%, yellow 6%, muted 2%. Red and yellow are flat spot inks and are never tinted or gradient-filled.
Typography
- Headings: Anton — always uppercase, always flush-left, tracking
-0.02em, leading 0.86, sized so a single word can span the full viewport. Headlines are set in stacked lines of varying width — MAKE / YOUR / POSTER — never a single line of centred text. Anton has one weight; hierarchy comes from size and colour block, not weight.
- Secondary headings: Archivo Black for sub-blocks; Archivo SemiBold uppercase 12px letterspaced
0.14em for section kickers and form labels.
- Body: Archivo.
- Scale: 1.414 modular, poster-driven — 96 / 68 / 44 / 28 / 18 / 15 / 12. Display sizes (96, 68) are fluid with
clamp() so the hero wordmark spans the viewport at every breakpoint; body stays 18/15 for comfortable reading at a 60–72ch measure.
Page 15 of 15
Shape language
Hard edges everywhere. Zero border radius on cards, inputs, buttons, and images — everything is a printed rectangle. Colour blocks are perfect rectangles that butt directly against each other with no gaps and no shadows. Rules are 3px solid black, used as section dividers and as the underline of the active step. The only non-rectangular element is the diagonal red band — a 4-degree rotated colour bar — that slices across the hero and the Poster Preview header. Buttons are rectangular slabs with a 2px black outline and flat fill; on hover the fill flips from black to red with no transition curve, just a 120ms cut.
Layout
A poster grid: 12 columns, 24px gutters, 64px outer margin on desktop, 20px on mobile. The hero is a full-bleed type composition, not a centred hero. The creation flow is a horizontal four-step press run — IMAGE → MESSAGE → STUDIO → PREVIEW — rendered as a numbered colour-block strip pinned under the header, with the current step as a red block and completed steps as black blocks with cream numerals. Forms sit in a two-column split: the left column is the oversized step headline (Anton 68px) and the instruction; the
No comments yet. Be the first!