|
| 1 | +# Product |
| 2 | + |
| 3 | +## Users |
| 4 | + |
| 5 | +Two audiences, with the primary one carrying the weight: |
| 6 | + |
| 7 | +- **Primary: pragmatic adults inside a team** (work, hobby club, friend group) who need to find a meeting window fast, without making anyone create an account. They land on a public link, type a name, paint availability on a heatmap, and leave. They are not romantics about scheduling software. They want the friction gone. |
| 8 | +- **Secondary: operators self-hosting tempoll.** Indie hackers, technical teams, privacy-minded organizations who want a polished When2Meet replacement on their own Postgres stack. They care about clean Docker/Coolify setup, sane defaults, and a product that does not embarrass them when they share the link. |
| 9 | + |
| 10 | +The organizer is just a participant with a private manage URL. There is no "admin" persona in the heavy enterprise sense. |
| 11 | + |
| 12 | +## Product Purpose |
| 13 | + |
| 14 | +tempoll is a modern, account-free, self-hostable When2Meet alternative. |
| 15 | + |
| 16 | +- Organizer creates an event from one date range, one daily window, one slot size. |
| 17 | +- Public link goes out. Participants join with only a name and paint availability on a live heatmap. |
| 18 | +- The system ranks the best meeting windows from shared overlap. |
| 19 | +- The organizer holds a separate private URL to rename or remove participants and to close the board. |
| 20 | +- Realtime updates use Postgres `LISTEN/NOTIFY` and SSE so the heatmap stays live. |
| 21 | + |
| 22 | +Success looks like: a team finds the meeting window in fewer minutes than it took to write the message that triggered the scheduling round. The product should feel inevitable, not impressive. |
| 23 | + |
| 24 | +## Brand Personality |
| 25 | + |
| 26 | +Three words: **smart, calm, functional.** Reading order matters. |
| 27 | + |
| 28 | +- *Smart* means the product knows what it is doing: ranked overlap, sensible defaults, dense compact grid, no popup begging for an email. Smart shows up in microcopy, in the absence of busywork, and in resisting feature creep. |
| 29 | +- *Calm* means typographic discipline, restrained color, generous breathing room around dense information. Closer to Linear or Cursor than to a marketing-led SaaS landing. |
| 30 | +- *Functional* means dense and practical over decorative. The heatmap is the product. Everything else exists to serve it. |
| 31 | + |
| 32 | +There is room for a small amount of personality on top of that baseline. Calm with a wink, not calm and beige. One precise moment of character (a piece of copy, a small motion, a deliberate accent) is worth more than seventeen rounded cards. |
| 33 | + |
| 34 | +Voice: declarative, concrete, no marketing puffery, no exclamation marks, no "Effortless scheduling for the modern team" energy. Short sentences. Verbs over adjectives. |
| 35 | + |
| 36 | +## Anti-references |
| 37 | + |
| 38 | +What tempoll must **not** look or sound like: |
| 39 | + |
| 40 | +- **Calendly-style enterprise overload.** Stacked feature shelves, big hero images of laptops, "trusted by" logos, "Get a demo" CTAs. tempoll is the opposite end of that axis. |
| 41 | +- **Generic AI-output tells.** All the patterns called out in the impeccable shared design laws: gradient text, glassmorphism as default, hero-metric template, identical icon-plus-heading card grids, side-stripe borders on callouts, em dashes in body copy, "modern scheduling reimagined" prose. |
| 42 | +- **Bland-by-default SaaS.** Cream backgrounds, slate-gray text, pill badges, Inter at every size, the obvious shadcn-demo or Tailwind-UI-marketing skeleton. Generic = fad = fail. |
| 43 | +- **Notion-clone / Vercel-dark-clone.** Borrowing somebody else's complete visual identity. tempoll has its own. |
| 44 | +- **Dashboardified scheduling.** Oversized cards, big chart hero, "your scheduling insights" framing. The heatmap is the product, not a widget inside a dashboard. |
| 45 | + |
| 46 | +## Design Principles |
| 47 | + |
| 48 | +Five strategic principles. Visual specifics (palette, type scale, radii) live in DESIGN.md, not here. |
| 49 | + |
| 50 | +1. **Density is the feature.** The scheduling grid stays close to classic When2Meet density. Compact, scannable, fast. Never expand the grid because there is empty space on the page; expand it because the user benefits. |
| 51 | +2. **Calm with a wink.** Linear/Cursor discipline as the baseline, then one precise moment of personality per surface. Voice, motion, accent color, microcopy. Never decorative noise across the whole surface. |
| 52 | +3. **Friction is honesty.** Account-free is a stance, not a missing feature. Surface what is private (organizer URLs) instead of hiding it. Never use dark patterns to harvest contact info. |
| 53 | +4. **Self-hostable is the brand.** The setup wizard, the docs, the env naming, and the UI all share the same craft level. If an operator opens the repo, the README should feel made by the same hand that made the heatmap. |
| 54 | +5. **Earn every element.** A new card, badge, illustration, or icon must justify its presence by changing the user's decision. If removing it changes nothing, remove it. |
| 55 | + |
| 56 | +## Accessibility & Inclusion |
| 57 | + |
| 58 | +Target: **WCAG 2.2 AA** as the default. Not a launch-blocking priority, but anything cheap is taken. |
| 59 | + |
| 60 | +- **Color is never the only signal.** The heatmap density scale varies lightness and saturation, not only hue, so it stays legible for the common color-vision deficiencies. |
| 61 | +- **Reduced motion respected.** Honor `prefers-reduced-motion`. No autoplay decorative motion. |
| 62 | +- **Keyboard reachable.** The heatmap, the create flow, and the organizer manage surface should all be operable by keyboard. Each slot is a focusable button; Tab/Shift-Tab moves between cells, and Space/Enter toggles selection. |
| 63 | +- **Semantic markup as default.** Real headings, real buttons, real form labels. Radix and shadcn primitives are used as designed, not flattened into divs. |
| 64 | +- **Focus is visible.** No `outline: none` without an equivalent ring. |
| 65 | +- **Text contrast safe by default.** Body and UI text meet AA against the chosen surfaces. Tinted neutrals are checked, not assumed. |
| 66 | + |
| 67 | +If a future accessibility-first audience (corporate procurement, public-sector self-hosters) shows up, this section can tighten to AAA in specific areas without rewriting the product. |
0 commit comments