{isGoal ? ‘๐’ : active ? ‘๐ฃ’ : ‘โ’}
);
return (
{/* Header */}
Daily Goal: 10 points = 1 step forward
Weekly Goal: 5 steps OR 50 points = Winner’s Circle!
{/* History Modal */}
{showHistory && (
{weekHistory.length === 0 ? (
)}
{/* Rules Modal */}
{showRules && (
)}
{/* Randomizer Modal */}
{showRandomizer && selectedPlayer && (
{spinResult === null && !isSpinning && (
)}
{isSpinning && (
)}
)}
{/* Player Progress Trackers */}
);
};
export default FamilyQuestGame;
๐ฉ
Family Quest Adventures
Week {currentWeek} – The Temple of Achievement
Adventure Archives
No adventures completed yet!
) : (
{weekHistory.map((week, idx) => (
))}
)}
Week {week.week} – {week.date}
๐ Winners: {week.winners}
{week.scores.map((score, i) => (
{score.name}: {score.points} pts, {score.steps} steps
))}
๐ How to Play Family Quest
๐ฏ The Goal
Reach the Winner’s Circle each week by achieving EITHER:
- 5 Steps (earned by meeting daily goals)
- OR 50+ Points in total for the week
๐ Weekly Cycle
- The week runs from Sunday to Saturday
- Click “Complete Adventure” on Saturday evening to crown winners and reset for the new week
โญ Daily Goals
- Each day, try to earn 10 points
- When you reach 10+ points, click “Take a Step” to add a step to your journey
- This resets your daily points back to 0, but keeps your weekly total
- Get 5 steps in one week to reach the Winner’s Circle!
๐ฐ Saturday Bonus Wheel
- If you haven’t reached the Winner’s Circle by Saturday morning, you get ONE bonus spin
- 25% chance to win 5 bonus points
- Use it wisely – you only get one spin per week!
- These bonus points could help you reach 50 points or your next step
๐งฉ How to Earn Points
- Complete Chores (๐งน) and Growth Goals (๐ฑ) from the quest list
- Click your name button under any quest to earn those points
- Point values range from 1-6 points depending on the task
- Add custom quests using the “Add New Quest” section
๐ Winning
- Anyone who reaches 5 steps OR 50+ points enters the Winner’s Circle
- Multiple family members can win in the same week!
- Winners are recorded in the History for bragging rights
- Everyone starts fresh each Sunday
๐ก Pro Tips
- Consistency wins! Focus on hitting that 10-point daily goal
- High-value quests (6 points) can help you catch up quickly
- If you’re close on Saturday, use your bonus wheel spin!
- The daily reset button (โป) lets you correct mistakes without taking a step
๐ฐ
Saturday Bonus Wheel!
{players.find(p => p.id === selectedPlayer)?.name} gets one spin for 5 bonus points!
{/* Spinning Wheel Animation */}
{spinResult === null ? ‘๐ฏ’ : spinResult ? ‘โจ’ : ‘๐’}
Spinning…
)}
{spinResult !== null && (
{spinResult ? ‘๐ YOU WIN 5 POINTS! ๐’ : ‘Better luck next week!’}
{players.map(player => {
const inWinnersCircle = player.points >= 50 || player.steps >= 5;
return (
{/* Indiana Jones Path */}
{inWinnersCircle && (
)}
{/* Daily Progress */}
{/* Saturday Bonus – Only show if not in winner’s circle and hasn’t used bonus */}
{!inWinnersCircle && !player.hasUsedBonus && (
)}
{player.hasUsedBonus && !inWinnersCircle && (
);
})}
{player.name.charAt(0)}
updatePlayerName(player.id, e.target.value)}
className=”text-xl font-bold border-2 border-gray-200 rounded px-2 py-1 focus:border-amber-400 focus:outline-none”
/>
{player.points} pts
{player.steps}/5 steps
{[0, 1, 2, 3, 4].map(step => (
step} isGoal={step === 4 && player.steps >= 5} />
))}
๐ โญ ๐
IN THE WINNER’S CIRCLE!
Today’s Progress
= 10 ? ‘text-green-600’ : ‘text-gray-600’}`}>
{player.dailyPoints}/10 pts
= 10 ? ‘bg-green-500’ : ‘bg-blue-500’
}`}
style={{ width: `${Math.min((player.dailyPoints / 10) * 100, 100)}%` }}
/>
Bonus spin used this week
)}
{/* Leaderboard */}
{/* Tasks */}
Leaderboard
{sortedPlayers.map((player, index) => (
))}
#{index + 1}
{player.name.charAt(0)}
{player.name}
{player.steps} steps
{player.points}
Quests & Challenges
{tasks.map(task => (
))}
{task.category === ‘chore’ ? ‘๐งน’ : ‘๐ฑ’}
{task.name}
{task.points}
{players.map(player => (
))}
Add New Quest
setNewTaskName(e.target.value)}
className=”w-full px-3 py-2 border-2 border-gray-200 rounded-lg focus:border-amber-400 focus:outline-none”
/>
setNewTaskPoints(e.target.value)}
className=”w-24 px-3 py-2 border-2 border-gray-200 rounded-lg focus:border-amber-400 focus:outline-none”
/>
