Skip to content

About this template

Daybloom is a single-page landing site for a mobile app, written around an invented habit tracker. It is built for people launching a consumer app who want the page itself to feel like the product: soft, friendly and a little playful. The page sits on a warm cream background with drifting peach, lilac, mint and butter gradient blobs, large rounded cards and a violet accent used only for actions. The centerpiece is a phone drawn entirely in CSS, with a frame, camera pill, status bar and home indicator and no device artwork. In the features section the phone stays pinned beside the copy, and its screen cross-fades between four in-app views (today's check-ins, a forgiving streak, a weekly chart and a reminder feed) as each feature scrolls past. On phones the pinned layout turns into a stacked one, with a smaller phone above each step. Below that is a working streak calendar. Visitors pick one of three habits, tap days to mark them done, and watch the current streak, longest streak and completion ring update, with a small burst of confetti dots at milestones. The rest of the page covers the usual launch needs: a slow marquee of habit chips, six testimonial cards with drawn initial avatars instead of photos or company logos, Free and Plus pricing with a sliding monthly and yearly switch, a short FAQ and a closing download card. The download buttons are plain pills drawn in code, not store badges. Everything is code-drawn or comes from Lucide, so no image licenses need tracking. To adapt it, change the brand, what the app does, who it is for, the four example habits and the Plus price. The layout, palette and motion stay the same, so a plant-care app or a study timer fits just as well.

The template prompt

The live demo was built from exactly this text — nothing added.

# Daybloom — Pastel Habit Tracker App Landing Page

Build this website exactly as described below. Replace the [VARIABLES] with your own values; keep everything else.

## Brief
A single-page landing site for Dewly, an invented mobile habit-tracking app. Light and airy on a cream background with soft drifting pastel gradient blobs. The signature pieces: a phone mockup drawn entirely in CSS that stays sticky while its screen cross-fades between four in-app views as the visitor scrolls through the features, and an interactive streak calendar visitors can tap to see their streak, longest streak and completion ring update live. Also: a habit-chip marquee, testimonials with code-drawn initial avatars, Free / Plus pricing with a monthly-yearly switch, an FAQ and a download card with code-drawn download buttons.

- Audience: Busy people who keep restarting their routines and want a tracker that feels kind rather than strict.
- Goal: Get the visitor to download the app. Every primary button leads to the download section, and the interactive demos show how the app feels before they install it.
- Tone: Warm, encouraging and lightly playful. Short sentences, no guilt and no hustle language. Feels like a friend who remembers things for you.

## Stack
- Framework: Vite 5 + React 18 + TypeScript
- Styling: Tailwind CSS 3.4
- Libraries: react 18 (MIT), react-dom 18 (MIT), motion (import from motion/react) (MIT), lucide-react (ISC), @fontsource-variable/fraunces (OFL-1.1), @fontsource-variable/plus-jakarta-sans (OFL-1.1), tailwindcss 3.4 + postcss + autoprefixer (dev) (MIT), vite 5 + @vitejs/plugin-react (dev) (MIT), typescript (dev) (Apache-2.0)
- Build: `npm run build` → static files in `dist/`. No backend, no server code, no external APIs.
- Setup:
  - Scaffold with the Vite react-ts template; package.json scripts: dev = vite, build = tsc -b && vite build, preview = vite preview.
  - vite.config.ts: plugins [react()], base: './', build: { sourcemap: false, outDir: 'dist' }.
  - tailwind.config.ts: content ['./index.html', './src/**/*.{ts,tsx}']; extend colors with every token from Design > Colors using the names cream, ink, muted, line, peach, lilac, mint, butter, violet, violet-deep, coral, frame; extend fontFamily display: ['Fraunces Variable', 'Georgia', 'serif'] and sans: ['Plus Jakarta Sans Variable', 'system-ui', 'sans-serif'].
  - Define keyframes in tailwind.config.ts: drift (translate 0,0 → 40px,-30px → -30px,20px → 0,0 over 22s ease-in-out infinite), float (translateY 0 → -8px → 0 over 6s ease-in-out infinite), marquee (translateX 0 → -50% over 40s linear infinite) and marquee-reverse (translateX -50% → 0 over 40s linear infinite); expose them as animate-drift, animate-float, animate-marquee and animate-marquee-reverse.
  - In src/index.css add a @media (prefers-reduced-motion: reduce) block that sets animation: none on .animate-drift, .animate-float, .animate-marquee and .animate-marquee-reverse, and sets html { scroll-behavior: auto }. Otherwise html { scroll-behavior: smooth } with scroll-padding-top: 88px.
  - Import '@fontsource-variable/fraunces' and '@fontsource-variable/plus-jakarta-sans' at the top of src/main.tsx. Body uses font-sans, text-ink and bg-cream.
  - All copy, habit lists, calendar seed data, testimonials, prices and FAQ live in src/content.ts, keyed by section. Components only read from it.
  - Components in src/components/: Nav, Hero, PhoneFrame, screens/TodayScreen, screens/StreakScreen, screens/WeekScreen, screens/RemindersScreen, HabitMarquee, FeatureScroll, StreakDemo, Testimonials, Pricing, Faq, DownloadCta, Footer, Logo, DownloadButtons, BackgroundBlobs.
  - PhoneFrame takes a width prop (300 on desktop, 240 on mobile) and scales all inner dimensions proportionally with a CSS transform or a scale factor, keeping a 300:620 aspect ratio.
  - Use useReducedMotion() from motion/react in every component with JS-driven motion. When it returns true, skip entrance and float animations and swap screens instantly.
  - index.html: <title>Dewly — Tiny habits, kept gently</title> (brand from [BRAND]) and <link rel="icon" href="./favicon.svg" type="image/svg+xml">; put favicon.svg (the Logo mark) in public/.

## Variables
- [BRAND] — App name (default: "Dewly"). Short, invented, one word. Used in the nav wordmark, the title and the copy.
- [APP_PURPOSE] — What the app does, in one line (default: "a gentle habit tracker that celebrates small daily wins"). Drives the hero subhead, the feature copy and the in-phone screens.
- [AUDIENCE] — Who it is for (default: "busy people who keep restarting their routines"). Shapes the testimonials (roles), the FAQ and the tone of the reminders.
- [HABIT_EXAMPLES] — Four example items tracked in the app (default: "Drink water, Read 10 pages, Stretch, Walk outside"). Exactly four, comma-separated. They fill the Today screen, the first four marquee chips and the first three streak-demo chips. Pick a fitting Lucide icon for each.
- [PLUS_PRICE] — Paid plan price (default: "$4.99 a month or $35.99 a year"). Monthly and yearly prices. Compute the per-month yearly price and the savings percentage from them, rounded to whole percent.
- [CREDIT] — keep a small "Template by VibeFather" link to https://vibefather.ai/t/daybloom in the footer (default: yes; delete this line to remove it)

The copy under Pages & Sections is written for the default values. If your values differ, rewrite every headline, paragraph, label and image for them — same length, tone and structure. Layout, colors, type and motion stay as described.
Keep all copy, image paths and links in one content file (for example `src/content.ts`), keyed by section, so the content can be swapped later without touching components.

Pro template. The design, sections, motion and assets parts of this prompt are for Pro members. The live demo and DESIGN.md stay free.

Join Pro early access →

DESIGN.md

The design system on its own — colors, type, spacing and motion. Apply this look to a project you already have.

---
name: "Daybloom"
colors:
  cream: "#FFF8F3"
  ink: "#2B2340"
  muted: "#6E6585"
  line: "#EFE6F5"
  peach: "#FFC9B5"
  lilac: "#D9C8FF"
  mint: "#BDEBD8"
  butter: "#FFE9A8"
  violet: "#7C5CFF"
  violet_deep: "#5B3FE0"
  coral: "#FF7A59"
  white: "#FFFFFF"
  frame: "#1E1A2B"
typography:
  display_h1_h2_h3_big_numbers: { family: "Fraunces Variable", weights: [500, 600] }
  body_ui_buttons_and_in_phone_text: { family: "Plus Jakarta Sans Variable", weights: [400, 500, 600, 700] }
spacing: "8px base grid. Content container max-w-6xl (1152px), px-6 mobile / px-8 desktop. Sections py-20 on mobile and py-28 on desktop. Cards use p-6 mobile / p-8 desktop. h1 is 64px/1.05 on desktop and 42px/1.08 on mobile, Fraunces 600, tracking -0.02em. h2 is 48px/1.1 desktop and 34px mobile, Fraunces 600. h3 is 26px Fraunces 500. Body is 18px/1.6 desktop and 16px mobile. Eyebrows are 13px Plus Jakarta 600 uppercase with tracking 0.12em, violet, inside a white pill with a Line border (px-3 py-1)."
radius: "Cards 28px. Inner tiles and calendar cells 14px. Buttons, chips, toggles and eyebrow pills fully rounded (9999px). Phone frame 48px outer and 38px screen at 300px width, scaled proportionally."
---

# Daybloom — Design System

Apply this design system to an existing project. It describes the look and feel only; for the full site, use prompt.md.

## Colors
- **Cream** `#FFF8F3` — Page background and phone screen background
- **Ink** `#2B2340` — Headings, body text, primary download button fill
- **Muted** `#6E6585` — Secondary text, captions, disabled calendar numbers
- **Line** `#EFE6F5` — Card borders, dividers, calendar cell borders
- **Peach** `#FFC9B5` — Gradient blob, Stretch habit color, avatar fill
- **Lilac** `#D9C8FF` — Gradient blob, Read habit color, avatar fill
- **Mint** `#BDEBD8` — Gradient blob, Water habit color, avatar fill
- **Butter** `#FFE9A8` — Gradient blob, streak flame backdrop, avatar fill
- **Violet** `#7C5CFF` — Primary accent: CTAs, toggle pill, active dots, today ring, focus rings
- **Violet Deep** `#5B3FE0` — Hover and pressed state of violet elements
- **Coral** `#FF7A59` — Streak flame icon, savings badge, confetti dots, star ratings
- **White** `#FFFFFF` — Card surfaces, secondary download button, phone notification cards
- **Frame** `#1E1A2B` — CSS phone frame and camera pill

## Typography
- **Display (h1, h2, h3, big numbers)** — Fraunces Variable (OFL), weights 500/600. Self-host the font files.
- **Body, UI, buttons and in-phone text** — Plus Jakarta Sans Variable (OFL), weights 400/500/600/700. Self-host the font files.

## Spacing & shape
- Spacing: 8px base grid. Content container max-w-6xl (1152px), px-6 mobile / px-8 desktop. Sections py-20 on mobile and py-28 on desktop. Cards use p-6 mobile / p-8 desktop. h1 is 64px/1.05 on desktop and 42px/1.08 on mobile, Fraunces 600, tracking -0.02em. h2 is 48px/1.1 desktop and 34px mobile, Fraunces 600. h3 is 26px Fraunces 500. Body is 18px/1.6 desktop and 16px mobile. Eyebrows are 13px Plus Jakarta 600 uppercase with tracking 0.12em, violet, inside a white pill with a Line border (px-3 py-1).
- Radius: Cards 28px. Inner tiles and calendar cells 14px. Buttons, chips, toggles and eyebrow pills fully rounded (9999px). Phone frame 48px outer and 38px screen at 300px width, scaled proportionally.

## Motion
- Background blobs: four absolutely positioned circles (520–720px, filter blur(80px), opacity 0.7) in Peach, Lilac, Mint and Butter, each with animate-drift and a different animation-delay (0s, -6s, -11s, -16s). They sit behind content in a fixed, pointer-events-none layer.
- Section reveal: each section's header and cards fade from opacity 0, y 24 to opacity 1, y 0 over 0.6s with ease [0.22, 1, 0.36, 1] when 20% visible, once only. Card grids stagger children by 0.08s.
- Hero entrance on load: eyebrow, h1, subhead, buttons and rating row stagger in (0.1s apart, 0.7s each, y 20 → 0). The phone enters from y 60, rotate -4deg, opacity 0 to y 0, rotate -4deg, opacity 1 over 0.9s, then loops animate-float.
- Feature screens: when the active step changes, the outgoing screen fades out (opacity 1 → 0, 0.25s) and the incoming one fades in from opacity 0, y 12, scale 0.98 to opacity 1, y 0, scale 1 over 0.45s, using AnimatePresence with mode 'wait'. The blob behind the phone transitions background-color over 0.6s.
- Micro-interactions: buttons lift -2px with a stronger shadow on hover over 0.2s and scale to 0.97 on press. Calendar cells spring-scale to 1.12 and back on tap (stiffness 500, damping 20). The pricing toggle pill slides with a spring (stiffness 400, damping 30) using a shared layoutId.
- Prices swap with a vertical roll: the old number exits to y -12 with opacity 0 and the new one enters from y 12 over 0.3s.
- Milestone confetti: 12 small circles (6–8px) in Coral, Violet, Mint and Butter burst from the stats ring outward at random angles (40–90px), fading out over 0.8s.
- prefers-reduced-motion: no blob drift, no float, no marquee movement (the chips wrap as a static centered row), no confetti, no entrance transforms (content is visible immediately), and feature screens swap with no transition.

## Imagery
No photos or bitmaps. Everything is drawn in code: pastel blurred blobs in CSS, the phone and every in-app screen in HTML/CSS, the logo and favicon as inline SVG, avatars as colored circles with initials, icons from lucide-react, and the confetti as divs. A faint grain overlay (an inline SVG feTurbulence data URI, opacity 0.04, fixed, pointer-events-none) sits above the blobs.

## Tone
Warm, encouraging and lightly playful. Short sentences, no guilt and no hustle language. Feels like a friend who remembers things for you.

---
— Prompt by VibeFather · https://vibefather.ai/t/daybloom · CC BY-NC 4.0 (non-commercial; commercial use needs a VibeFather Pro license) · Request removal: https://vibefather.ai/takedown