// app/page.tsx "use client"; import { useRouter } from "next/navigation"; import { useCallback, useMemo, useState } from "react"; import { Button } from "@/components/ui/button"; import { Card } from "@/components/ui/card"; import { Dialog, DialogContent, DialogFooter, DialogHeader, DialogTitle, } from "@/components/ui/dialog"; import { Input } from "@/components/ui/input"; import { Separator } from "@/components/ui/separator"; type Mode = "freeflow" | "sprint" | "deepwork"; function modeLabel(mode: Mode) { switch (mode) { case "freeflow": return "프리플로우"; case "sprint": return "스프린트"; case "deepwork": return "딥워크"; } } export default function HomePage() { const router = useRouter(); const [open, setOpen] = useState(false); const [mode, setMode] = useState(null); const [goal, setGoal] = useState(""); const meta = useMemo(() => { if (!mode) return ""; if (mode === "freeflow") return "무제한"; if (mode === "sprint") return "25분"; return "90분"; }, [mode]); const go = useCallback( (mode: Mode, goal?: string) => { const params = new URLSearchParams(); params.set("mode", mode); if (goal && goal.trim().length > 0) { localStorage.setItem("hushroom:session-goal", goal.trim()); } router.push(`/session?${params.toString()}`); }, [router], ); const openDialog = (mode: Mode) => { setMode(mode); setGoal(""); setOpen(true); }; const start = () => { if (!mode) return; setOpen(false); go(mode, goal); }; return (
hushroom
자유 세션
시간 제한 없이, 원할 때 종료 (60분 마다 노크합니다.)
시간 고정 세션
한 번 실행되고 끝나면 요약으로 이동
{/* Sprint / Deepwork */}
openDialog("sprint")} /> openDialog("deepwork")} />
); } function ModeTile({ title, meta, onClick, }: { title: string; meta: string; onClick: () => void; }) { return ( ); } function SessionGoalDialog({ open, onOpenChange, mode, meta, goal, setGoal, onStart, }: { open: boolean; onOpenChange: (v: boolean) => void; mode: Mode | null; meta: string; goal: string; setGoal: (v: string) => void; onStart: () => void; }) { const title = mode ? `${modeLabel(mode)} · ${meta}` : "세션"; return ( 세션 목표 설정
{title}
setGoal(e.target.value)} placeholder="목표를 입력하세요" className="text-lg" autoFocus />
짧게 적을수록 좋아요. 예: “이력서 1페이지”, “문제 10개”
); }