bloombase/docs/superpowers/specs/2026-05-31-bloombase-redesign-design.md
Stephan Kerkman ff4ff7645c docs: add BloomBase UI redesign spec
Covers visual system (Tailwind, Great Vibes/Timeless font, coral palette),
5-tab bottom nav, all screen designs, Location.cover_photo model change,
and file change summary.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-31 20:59:47 +02:00

7.6 KiB
Raw Permalink Blame History

BloomBase UI Redesign — Design Spec

Date: 2026-05-31 Project: plantdb (BloomBase) Primary user: Naomi (plant owner, photographer, Dutch Farmhouse content creator) Inspired by: Naomi's own design mockup — vibrant organic poster aesthetic


1. Scope

Full visual redesign of the BloomBase Django app, replacing Bootstrap 5 with Tailwind CSS. New bottom navigation. Location model extended with cover photo. All existing screens restyled. One new screen (Area Detail).

In scope:

  • Replace Bootstrap 5 with Tailwind CSS (CDN play/JIT acceptable; production: CLI build)
  • Rewrite base.html with bottom navigation
  • Restyle all existing templates: dashboard, plant list, plant detail, locations, identify flow
  • New Area Detail page (cover photo header + plant grid)
  • Location.cover_photo ImageField + migration + upload UI

Out of scope:

  • Care tab new features (stub tab only)
  • Profile tab (stub tab only)
  • Authentication / multi-user

2. Visual System

Color Palette

Role Value
Page background #FFF8F2 (warm cream)
Primary / CTA #F07040 coral-orange
CTA gradient linear-gradient(135deg, #F58040, #E84020)
Accent / nature #52B788 green
Dark text #1A1208
Muted text #B0A090
Card background #FFFFFF
Card border / subtle #F0E4D4
Tint background #FFF8F2

Typography

Usage Font Weight Size
Brand name "Bloombase" Great Vibes (approximates Timeless) 400 3246px
Page headlines Nunito 900 2128px
Section titles Nunito 800 1619px
Body / labels Nunito 600700 912px
Tagline / CTA sub Pacifico 400 1416px

Google Fonts import:

Nunito:wght@400;600;700;800;900 | Great Vibes | Pacifico

Note: "Timeless" (Naomi's preferred font) is a commercial script font. Great Vibes is the closest free equivalent; swap for Timeless font file if provided.

Decorative Elements

  • Page canvas: two fixed-position CSS blob shapes (coral top-left, amber bottom-right) at ~20% opacity
  • Canvas SVG flowers: hibiscus (top-right), daisy (bottom-right), small pink flower (mid-left), leaf cluster (bottom-left) — fixed-position, pointer-events: none
  • These decorations live on the page canvas only, never inside phone/card content areas
  • Card interiors: clean white, no decorations

3. Navigation

Bottom navigation bar — 5 tabs, height 62px, stays within overflow: hidden.

Tab Icon Active state Target
Home house SVG coral fill /
My Garden circle/plant SVG coral stroke /locations/
+ (FAB) gradient circle 44px always orange /identify/
Care mic/leaf SVG coral stroke Stub (future)
Profile person SVG coral stroke Stub (future)

FAB: background: linear-gradient(145deg, #F58040, #E84020), box-shadow: 0 4px 16px rgba(240,80,40,0.5), sits within nav bar height (no negative margin needed).


4. Screens

4.1 Home (dashboard.html)

Camera-first layout. Replaces existing stats cards.

  • Top bar: hamburger icon (left) + bell icon (right)
  • Greeting: "Hello, Plant Lover! 🌿" (small, muted)
  • Headline: "What are we growing today?" (Nunito 900, "growing" in coral)
  • Sub: "Identify a plant and add it to Bloombase."
  • Camera viewfinder: dark rounded card (~114px tall), corner brackets, shutter button (gradient) + gallery button
  • My Garden pill: icon + "My Garden" + plant/area count + chevron → links to /locations/
  • Bottom nav: Home tab active

4.2 My Garden (locations.html)

List of areas/locations.

  • Header: "My Garden" (Nunito 900) + "Edit" link (coral, right)
  • Search bar: pill shape, gray tint background
  • Area rows: cover photo thumbnail (68×60px, object-fit: cover) + area name + plant count + chevron
    • If no cover photo: CSS gradient placeholder (each area gets a different hue)
  • No extra + FAB on this screen — + in bottom nav handles adding
  • Bottom nav: My Garden tab active

4.3 Area Detail (new: /locations/<id>/)

  • Cover photo header: full-width, ~180px tall, object-fit: cover, gradient overlay at bottom
  • Back button (top-left), edit button (top-right) — white pill buttons
  • Area name + plant count below hero
  • Plant grid: 2 columns, white cards, plant photo thumbnail + common name + species
  • Empty state: friendly message + link to identify
  • Bottom nav: My Garden tab active

4.4 Plant Detail (plant_detail.html)

  • Hero image: full-width top section
  • Back + favorite buttons overlaid (white pill)
  • Plant name (Nunito 900) + Latin name (coral)
  • Match confidence bar (if from identification)
  • Care icons row: light · water · temp
  • Action buttons: "Add to my garden" (gradient CTA) + "Save to identify later" (outline)
  • Photo gallery below fold

4.5 Identify / Camera (identify flow)

  • Viewfinder as primary element
  • Gallery picker button + shutter button
  • Post-identification: Plant Detail screen (#4.4) with confidence bar visible

4.6 Plant List (plant_list.html)

  • Search bar at top
  • Location filter chips (horizontal scroll, coral when active)
  • Plant cards: thumbnail + name + area tag
  • Matches vibrant palette

5. Data Model Change

Location model — add one field:

cover_photo = models.ImageField(upload_to='locations/', blank=True, null=True)

Migration: python manage.py makemigrations && migrate

Location edit/create form: add cover_photo file field. Display current photo with replace option. Use same upload pattern as plant photos (multipart form).


6. Implementation Approach

Tailwind Setup

Use Tailwind CSS CDN (Play CDN) for development: one <script> tag in base.html. For production build: add tailwindcss to npm devDependencies, generate output.css, serve as static file.

Template Strategy

  • base.html: remove Bootstrap, add Tailwind CDN, add bottom nav, add page blob/flower decorations
  • All other templates: inherit from new base.html, rewrite content blocks using Tailwind utility classes
  • Keep HTMX — no changes to behavior
  • Keep Django form handling — only CSS changes for form widgets

Custom CSS

Small bloombase.css for:

  • Great Vibes / Nunito font imports
  • CSS blob shapes (can't trivially do in Tailwind)
  • SVG canvas flowers (fixed-position)
  • Phone-specific patterns if needed in mockup/splash

Static Files

  • /static/css/bloombase.css — custom styles
  • /static/images/ — no new images needed (all CSS/SVG)

7. File Change Summary

File Change
plants/models.py Add cover_photo to Location
plants/migrations/XXXX_add_location_cover_photo.py New migration
plants/views.py Location edit/create views handle cover_photo
plants/forms.py LocationForm includes cover_photo
plants/templates/plants/base.html Full rewrite: Tailwind, bottom nav, decorations
plants/templates/plants/dashboard.html Camera-first home
plants/templates/plants/plant_list.html Tailwind restyle
plants/templates/plants/plant_detail.html Tailwind restyle
plants/templates/plants/locations.html My Garden with cover photos
plants/templates/plants/location_detail.html New — area detail page
plants/templates/plants/location_form.html Add cover photo upload
static/css/bloombase.css New — fonts, blobs, canvas flowers
plants/urls.py Add route for location_detail

8. Out-of-Scope Notes

  • Care tab: render a stub "Coming soon" page
  • Profile tab: render a stub or redirect to plant stats
  • Dark mode: not in scope
  • PWA / offline: not in scope
  • Multi-user / auth: not in scope