Prompt 05: Card of the Day (Daily Ritual)
Goal
Build the Card of the Day standalone ritual screen. This is a high-engagement, gamified feature where users draw a single card to earn daily credits and gain a quick insight. It must feel like a "sacred pause".
Design Constraints (From Master Guide)
- Visuals: "OLED Noir" (
#000000base) with "Ethereal Glaze". The background should feature a slow-moving, subtle radial gradient (e.g., deep amethyst to black) focused on the center of the screen. - Typography: Dual-typography system. Use Playfair Display for the ritual prompt ("Seek Your Daily Insight"). Use Inter for the "Draw for +5 credits" subtitle.
- Pacing: Extreme "Slow UI". This is a micro-meditation. The entrance of the cards should be delayed, floating up slowly from the bottom.
Requirements
- Component:
CardOfDayRitualView. - Pre-Draw State:
- Header: "Card of the Day" (Gold
#c5a059). - Subtitle: "Draw for +5 credits" (Muted text
#999490). - Center: Three face-down cards arrayed horizontally or in a slight arc. They should have a continuous, subtle levitation animation (sub-0.1Hz
translateYandrotateZ).
- Header: "Card of the Day" (Gold
- Interaction (The Draw):
- When a user taps a card, the other two fade out (
opacity: 0,duration: 500ms). - The selected card slides to the absolute center of the screen.
- A dramatic 3D flip animation occurs (
react-native-reanimated). - A glowing "Aura" (using
expo-blurand a radial gradient) bursts behind the flipped card.
- When a user taps a card, the other two fade out (
- Post-Draw State:
- The card's name (Serif) and a short 1-2 sentence interpretation stream in below the card (Typewriter effect).
- A "Claim +5 Credits" button appears.
Implementation Guidance
- Haptics (CRITICAL):
impactAsync(ImpactFeedbackStyle.Light)when the three cards initially appear.impactAsync(ImpactFeedbackStyle.Medium)when the user taps their chosen card.- A distinct, custom haptic sequence (e.g., three rapid
Heavyimpacts or a continuous vibration if possible via a specialized library, otherwise use a delayedHeavyimpact) exactly as the card completes its 180° flip.
- Performance: Preload the front images of the possible daily cards so the flip animation does not hitch while loading a remote image.
- State Management: Use the previously built
zustandritual store to track if the daily draw has been completed, preventing a re-draw.