|
| 1 | +# Design Context |
| 2 | + |
| 3 | +awesome-python.com is a searchable, filterable index of ~650 curated Python projects. It is a reference tool, not a landing page and not a GitHub README mirror. |
| 4 | + |
| 5 | +## Users |
| 6 | + |
| 7 | +Working Python developers (mid to senior). They already write Python daily and arrive with a specific question in mind: "what's a good HTTP client these days", "is there still a maintained ORM for X", "what are people using for task queues now". Secondary readers: polyglot developers evaluating Python's ecosystem, and curious browsers. |
| 8 | + |
| 9 | +Jobs to be done: |
| 10 | + |
| 11 | +1. Find a library for a specific need fast (search + tag filter). |
| 12 | +2. Compare candidates at a glance (stars, last commit, tags, one-line description). |
| 13 | +3. Confirm a project is alive before clicking through. |
| 14 | + |
| 15 | +These users skim. They reward density and terse copy. They penalize marketing fluff. |
| 16 | + |
| 17 | +## Brand Personality |
| 18 | + |
| 19 | +Three words: **opinionated, confident, dense**. |
| 20 | + |
| 21 | +Voice: |
| 22 | + |
| 23 | +- Editorial. Every word earns its place. |
| 24 | +- Confident, not combative. "This is the list" energy, not "check out these cool projects". |
| 25 | +- No hype. The content is what's interesting. |
| 26 | +- Calm authority. Closer to a well-edited technical reference (O'Reilly index, The Economist briefing, a good man page) than a blog or product site. |
| 27 | + |
| 28 | +Emotional goals: trust, efficiency, craft. The reader should feel the list was edited by someone with taste, find what they need in seconds, and notice the typographic care as a signal that the curation is careful too. |
| 29 | + |
| 30 | +## Aesthetic Direction |
| 31 | + |
| 32 | +Stay close to the current direction. It works. |
| 33 | + |
| 34 | +- Warm editorial palette in OKLCH. Cream/ivory page, dark earthy hero, warm brown-red accent near `oklch(58% 0.16 45)`. |
| 35 | +- Type pairing: `Cormorant Garamond` (serif display, 600) with `Manrope` (sans body, 400/600/700/800). Do not swap. |
| 36 | +- Magazine-cover scale for the main headline (`clamp(4.5rem, 11vw, 8.5rem)`), then a tight modular scale for the rest. |
| 37 | +- Textured hero: subtle grid, slow sheen, warm radial gradients. Respect `prefers-reduced-motion`. |
| 38 | +- Light theme only (`color-scheme: light`). No dark mode toggle, no alternate palettes. |
| 39 | +- Table-driven index (sticky header, sortable columns, expandable rows). Not a card grid. |
| 40 | +- Dark warm charcoal footer, part of the same system. |
| 41 | + |
| 42 | +References (what to stay close to): |
| 43 | + |
| 44 | +- Magazine reference pages (The Economist, FT Weekend, Monocle). |
| 45 | +- Field-guide books. Curated, functional, hand-made. |
| 46 | +- Library card catalogs. Dense tabular information, excellent typography, no decoration for decoration's sake. |
| 47 | + |
| 48 | +Anti-references (avoid strictly): |
| 49 | + |
| 50 | +- Generic dark developer-tool look. No cyan on near-black, neon gradients, VSCode-palette dashboards, terminal-green monospace branding. |
| 51 | +- Other awesome-* sites. No plain README dumps, bare lists of links, no voice. |
| 52 | +- SaaS marketing pages. No big metric counters, testimonial cards, feature grids, pricing tiers, or "join 10,000+ developers" social proof bands. |
| 53 | + |
| 54 | +## Design Principles |
| 55 | + |
| 56 | +1. **The list is the hero.** Hero, sponsor band, and CTA exist, but they must not compete with the table for attention. |
| 57 | +2. **Density is a feature.** Prefer tables and tight rhythm over giant cards with one fact each. Mid-senior developers want to see more at once. |
| 58 | +3. **Editorial typography over decoration.** Visual interest comes from the serif/sans pairing, type hierarchy, and whitespace. Not from gradients, shadows, badges, or icon boxes above headings. |
| 59 | +4. **Warm, not cool.** Neutrals tint toward warm hues (roughly 55 to 80 in OKLCH). Pure grays and cool blues do not belong. |
| 60 | +5. **One point of view.** No dark mode, no theme picker, no alternate palettes. Consistency signals curation. |
| 61 | + |
| 62 | +## Implementation Rules |
| 63 | + |
| 64 | +The project already follows these. Future work must keep them. |
| 65 | + |
| 66 | +Layout and sizing: |
| 67 | + |
| 68 | +- Keep existing `--shell-max: 84rem` (~1344px). Do not drop below 1280px for the main column. |
| 69 | +- Body type floor is 16px (`--text-base: 1rem`). Content-heavy passages may go to 1.125rem. |
| 70 | +- Adjacent heading levels differ by at least 0.25rem of rendered size. |
| 71 | + |
| 72 | +Color: |
| 73 | + |
| 74 | +- Use OKLCH for any new color. Not HSL, not hex. |
| 75 | +- Accent colors (`--accent`, `--accent-deep`) only on interactive elements. |
| 76 | +- Tags, badges, pills, inline code, source badges use `--ink-muted`, `--ink-soft`, or `--bg-paper-strong`. Never the accent. |
| 77 | + |
| 78 | +CSS hygiene: |
| 79 | + |
| 80 | +- CSS custom properties for all colors and repeated values. |
| 81 | +- `rem` for spacing and type. `px` only for borders and shadows. |
| 82 | +- `gap` over child margins in flex and grid. |
| 83 | +- Logical properties (`margin-inline`, `padding-block`) over physical (`margin-left`, `padding-top`). |
| 84 | +- Never `!important`. Fix specificity instead. |
| 85 | +- Never `text-transform`. Write the casing in the markup. |
| 86 | +- Sibling components (card lists, grid items) share identical spacing. |
| 87 | + |
| 88 | +Absolute bans (from the impeccable skill): |
| 89 | + |
| 90 | +- No `border-left` or `border-right` greater than 1px as a colored accent stripe on cards, list items, callouts, or alerts. Use a different structure. |
| 91 | +- No gradient text (`background-clip: text` on gradients). Solid color only. |
| 92 | +- No glassmorphism as default decoration. |
| 93 | +- No bounce or elastic easing. Real objects decelerate smoothly. |
| 94 | + |
| 95 | +## Verification |
| 96 | + |
| 97 | +After any frontend change, use the `playwright-cli` skill to visually verify in a real browser. Check layout, responsiveness, and interactive behavior. Do not claim a UI change works based on code alone. |
0 commit comments