@@ -2,68 +2,60 @@ import Link from "next/link";
22import Image from "next/image" ;
33import { CommandCard } from "@/components/command-card" ;
44import { ResourceCard } from "@/components/resource-card" ;
5- import { changelog , siteData } from "@/lib/generated" ;
5+ import { changelog } from "@/lib/generated" ;
66import { withBasePath } from "@/lib/base-path" ;
77import { chineseTutorials , englishTutorials , type TutorialEntry } from "@/lib/content" ;
88import { routes } from "@/lib/routes" ;
99
1010function TapsDiagram ( ) {
1111 return (
1212 < div className = "pf-frame bg-[#fffdf9] p-4 sm:p-5" >
13- < div className = "grid gap-3" >
14- < div className = "grid gap-3 sm:grid-cols-[1.05fr_0.95fr]" >
15- < div className = "rounded-[22px] border-2 border-[#25314d] bg-[#eef8ff] p-4 shadow-[0_4px_0_#25314d]" >
16- < div className = "text-[11px] font-bold uppercase tracking-[0.16em] text-slate-500" >
17- Entry layer
18- </ div >
19- < div className = "mt-2 font-heading text-2xl font-bold text-[#25314d]" >
20- README + taskbeacon.yaml
21- </ div >
13+ < div className = "rounded-[26px] border-2 border-dashed border-[#5cabc0] bg-[#f8fcfe] p-4 sm:p-6" >
14+ < div className = "grid gap-3 lg:grid-cols-4" >
15+ < div className = "rounded-[20px] border-2 border-[#25314d] bg-[#eef8ff] p-4 shadow-[0_4px_0_#25314d]" >
16+ < div className = "text-[11px] font-bold uppercase tracking-[0.16em] text-slate-500" > Docs</ div >
17+ < div className = "mt-2 font-heading text-xl font-bold text-[#25314d]" > README</ div >
2218 < div className = "mt-2 text-sm leading-6 text-slate-700" >
23- Public description plus machine-readable metadata .
19+ Human-readable task purpose, setup, and review context .
2420 </ div >
2521 </ div >
26- < div className = "rounded-[22px] border-2 border-[#25314d] bg-[#fff3ed] p-4 shadow-[0_4px_0_#25314d]" >
27- < div className = "text-[11px] font-bold uppercase tracking-[0.16em] text-slate-500" >
28- Runtime layer
29- </ div >
30- < div className = "mt-2 font-heading text-2xl font-bold text-[#25314d]" >
31- config + src + assets
32- </ div >
22+ < div className = "rounded-[20px] border-2 border-[#25314d] bg-[#fff3ed] p-4 shadow-[0_4px_0_#25314d]" >
23+ < div className = "text-[11px] font-bold uppercase tracking-[0.16em] text-slate-500" > Metadata</ div >
24+ < div className = "mt-2 font-heading text-xl font-bold text-[#25314d]" > taskbeacon.yaml</ div >
3325 < div className = "mt-2 text-sm leading-6 text-slate-700" >
34- Keep config, task code , and participant-facing assets separate .
26+ Machine-readable IDs, maturity, preview links , and release state .
3527 </ div >
3628 </ div >
37- </ div >
38-
39- < div className = "grid gap-3 sm:grid-cols-[0.92fr_1.08fr]" >
40- < div className = "rounded-[22px] border-2 border-[#25314d] bg-[#efffe9] p-4 shadow-[0_4px_0_#25314d]" >
41- < div className = "text-[11px] font-bold uppercase tracking-[0.16em] text-slate-500" >
42- Review layer
43- </ div >
44- < div className = "mt-2 font-heading text-2xl font-bold text-[#25314d]" >
45- references + outputs
46- </ div >
29+ < div className = "rounded-[20px] border-2 border-[#25314d] bg-[#efffe9] p-4 shadow-[0_4px_0_#25314d]" >
30+ < div className = "text-[11px] font-bold uppercase tracking-[0.16em] text-slate-500" > Runtime</ div >
31+ < div className = "mt-2 font-heading text-xl font-bold text-[#25314d]" > config + src + assets</ div >
4732 < div className = "mt-2 text-sm leading-6 text-slate-700" >
48- QA artifacts, references , and logs remain attached to the same package .
33+ Separate task code, participant-facing assets , and local runtime settings .
4934 </ div >
5035 </ div >
51- < div className = "rounded-[22px] border-2 border-[#25314d] bg-white p-4 shadow-[0_4px_0_#25314d]" >
52- < div className = "text-[11px] font-bold uppercase tracking-[0.16em] text-slate-500" >
53- TAPS result
54- </ div >
55- < div className = "mt-2 font-heading text-2xl font-bold text-[#25314d]" >
56- One task package that stays readable across runtime, docs, and QA.
36+ < div className = "rounded-[20px] border-2 border-[#25314d] bg-[#f4f0ff] p-4 shadow-[0_4px_0_#25314d]" >
37+ < div className = "text-[11px] font-bold uppercase tracking-[0.16em] text-slate-500" > Review</ div >
38+ < div className = "mt-2 font-heading text-xl font-bold text-[#25314d]" > references + outputs</ div >
39+ < div className = "mt-2 text-sm leading-6 text-slate-700" >
40+ Keep QA artifacts, reference files, and release evidence attached to the task.
5741 </ div >
5842 </ div >
5943 </ div >
44+
45+ < div className = "mt-4 flex items-center justify-center" >
46+ < div className = "h-0.5 w-full max-w-[110px] bg-[#5cabc0]" />
47+ < div className = "mx-3 rounded-full border-2 border-[#25314d] bg-white px-4 py-2 text-xs font-bold uppercase tracking-[0.16em] text-[#25314d] shadow-[0_4px_0_#25314d]" >
48+ One Auditable Task Package
49+ </ div >
50+ < div className = "h-0.5 w-full max-w-[110px] bg-[#5cabc0]" />
51+ </ div >
6052 </ div >
6153 </ div >
6254 ) ;
6355}
6456
6557export default function HomePage ( ) {
66- const latest = changelog [ 0 ] ?? siteData . latest_release ;
58+ const latest = changelog [ 0 ] ?? null ;
6759 const tutorialCards = [
6860 englishTutorials . find ( ( entry ) => entry . slug === "getting-started" ) ,
6961 englishTutorials . find ( ( entry ) => entry . slug === "trigger-io" ) ,
@@ -146,64 +138,89 @@ export default function HomePage() {
146138 </ div >
147139 </ section >
148140
149- < section id = "taps" className = "grid gap-8 lg:grid-cols-[0.9fr_1.1fr] lg:items-center " >
150- < div >
141+ < section id = "taps" className = "space-y-8 " >
142+ < div className = "mx-auto max-w-4xl text-center" >
151143 < div className = "pf-section-chip" > TAPS</ div >
152144 < h2 className = "mt-5 font-heading text-3xl font-bold text-[#25314d] sm:text-4xl" >
153- A task package structure, not just another label .
145+ TAPS keeps the full task structure readable .
154146 </ h2 >
155147 < p className = "mt-4 text-base leading-8 text-slate-700" >
156- TAPS keeps the local runtime , config, metadata, references , and outputs inside one package
157- that stays easier to review across development, QA, and release .
148+ Instead of scattering docs , config, runtime code , and QA artifacts across unrelated places,
149+ TAPS keeps them attached to the same task package .
158150 </ p >
159- < div className = "mt-5 space-y-3 text-sm leading-6 text-slate-700" >
160- < div className = "rounded-[18px] border-2 border-[#25314d] bg-white px-4 py-3 shadow-[0_4px_0_#25314d]" >
161- PsyFlow handles the local runtime inside the package.
162- </ div >
163- < div className = "rounded-[18px] border-2 border-[#25314d] bg-white px-4 py-3 shadow-[0_4px_0_#25314d]" >
164- taskbeacon metadata and README describe the task from outside the code.
165- </ div >
166- < div className = "rounded-[18px] border-2 border-[#25314d] bg-white px-4 py-3 shadow-[0_4px_0_#25314d]" >
167- QA outputs and references stay attached to the same source of truth.
168- </ div >
169- </ div >
170151 </ div >
171152
172153 < TapsDiagram />
154+
155+ < div className = "grid gap-4 md:grid-cols-3" >
156+ < div className = "pf-frame-soft bg-white p-5" >
157+ < div className = "font-heading text-[1.5rem] font-bold text-[#25314d]" > Readable by humans</ div >
158+ < p className = "mt-3 text-sm leading-7 text-slate-700" >
159+ README carries the task story, setup notes, and review context without forcing readers into the code.
160+ </ p >
161+ </ div >
162+ < div className = "pf-frame-soft bg-white p-5" >
163+ < div className = "font-heading text-[1.5rem] font-bold text-[#25314d]" > Readable by tooling</ div >
164+ < p className = "mt-3 text-sm leading-7 text-slate-700" >
165+ Metadata and config stay structured, so QA, previews, and downstream tooling can reason over the task.
166+ </ p >
167+ </ div >
168+ < div className = "pf-frame-soft bg-white p-5" >
169+ < div className = "font-heading text-[1.5rem] font-bold text-[#25314d]" > Readable over time</ div >
170+ < p className = "mt-3 text-sm leading-7 text-slate-700" >
171+ Outputs, references, and release evidence remain beside the source package instead of drifting away.
172+ </ p >
173+ </ div >
174+ </ div >
173175 </ section >
174176
175- < section id = "framework" className = "grid gap-8 lg:grid-cols-[minmax(0,520px)_minmax(0,1fr)] lg:items-center" >
176- < div className = "pf-frame bg-[#fffdf9] p-4" >
177- < Image
178- src = { withBasePath ( "/images/framework/flowchart.png" ) }
179- alt = "PsyFlow framework flowchart"
180- width = { 1600 }
181- height = { 1200 }
182- className = "w-full rounded-[24px] border-2 border-[#25314d] bg-white shadow-[0_5px_0_#25314d]"
183- />
177+ < section id = "framework" className = "space-y-8" >
178+ < div className = "grid gap-6 xl:grid-cols-[minmax(0,0.9fr)_minmax(0,1.1fr)] xl:items-end" >
179+ < div >
180+ < div className = "pf-section-chip bg-[#f5c1b5]" > Framework</ div >
181+ < h2 className = "mt-5 font-heading text-3xl font-bold text-[#25314d] sm:text-4xl" >
182+ Keep the framework opinionated where reviewability matters.
183+ </ h2 >
184+ < p className = "mt-4 text-base leading-8 text-slate-700" >
185+ PsyFlow is designed around a few stable primitives: `BlockUnit`, `StimBank`, `StimUnit`,
186+ `SubInfo`, and `TaskSettings`. The goal is not abstraction for its own sake, but a task
187+ runtime that stays readable when the paradigm grows.
188+ </ p >
189+ </ div >
190+
191+ < div className = "pf-frame-soft bg-[#eef8ff] p-5" >
192+ < div className = "text-[11px] font-bold uppercase tracking-[0.18em] text-slate-500" >
193+ Framework idea
194+ </ div >
195+ < p className = "mt-3 text-sm leading-7 text-slate-700" >
196+ Keep generic runtime work inside the framework, but keep paradigm logic close to the task.
197+ That split is what makes larger tasks easier to test, localize, and review.
198+ </ p >
199+ </ div >
184200 </ div >
185201
186- < div >
187- < div className = "pf-section-chip bg-[#f5c1b5]" > Framework</ div >
188- < h2 className = "mt-5 font-heading text-3xl font-bold text-[#25314d] sm:text-4xl" >
189- Keep the framework opinionated where reviewability matters.
190- </ h2 >
191- < p className = "mt-4 text-base leading-8 text-slate-700" >
192- PsyFlow is designed around a few stable primitives: `BlockUnit`, `StimBank`, `StimUnit`,
193- `SubInfo`, and `TaskSettings`. The goal is not abstraction for its own sake, but a task
194- runtime that stays readable when the paradigm grows.
195- </ p >
196- < div className = "mt-5 grid gap-3 sm:grid-cols-2" >
197- < div className = "rounded-[18px] border-2 border-[#25314d] bg-[#eef8ff] px-4 py-4 text-sm leading-6 text-slate-700 shadow-[0_4px_0_#25314d]" >
202+ < div className = "grid gap-6 xl:grid-cols-[minmax(0,1.1fr)_minmax(0,0.9fr)] xl:items-stretch" >
203+ < div className = "pf-frame bg-[#fffdf9] p-4" >
204+ < Image
205+ src = { withBasePath ( "/images/framework/flowchart.png" ) }
206+ alt = "PsyFlow framework flowchart"
207+ width = { 1600 }
208+ height = { 1200 }
209+ className = "w-full rounded-[24px] border-2 border-[#25314d] bg-white shadow-[0_5px_0_#25314d]"
210+ />
211+ </ div >
212+
213+ < div className = "grid gap-4 sm:grid-cols-2 xl:grid-cols-2" >
214+ < div className = "rounded-[18px] border-2 border-[#25314d] bg-[#eef8ff] px-4 py-4 text-sm leading-7 text-slate-700 shadow-[0_4px_0_#25314d]" >
198215 Use config and settings for reusable runtime state.
199216 </ div >
200- < div className = "rounded-[18px] border-2 border-[#25314d] bg-[#fff3ed] px-4 py-4 text-sm leading-6 text-slate-700 shadow-[0_4px_0_#25314d]" >
217+ < div className = "rounded-[18px] border-2 border-[#25314d] bg-[#fff3ed] px-4 py-4 text-sm leading-7 text-slate-700 shadow-[0_4px_0_#25314d]" >
201218 Keep `main.py` orchestration separate from `run_trial.py`.
202219 </ div >
203- < div className = "rounded-[18px] border-2 border-[#25314d] bg-[#efffe9] px-4 py-4 text-sm leading-6 text-slate-700 shadow-[0_4px_0_#25314d]" >
220+ < div className = "rounded-[18px] border-2 border-[#25314d] bg-[#efffe9] px-4 py-4 text-sm leading-7 text-slate-700 shadow-[0_4px_0_#25314d]" >
204221 Let framework helpers absorb generic boilerplate, not paradigm logic.
205222 </ div >
206- < div className = "rounded-[18px] border-2 border-[#25314d] bg-[#f4f0ff] px-4 py-4 text-sm leading-6 text-slate-700 shadow-[0_4px_0_#25314d]" >
223+ < div className = "rounded-[18px] border-2 border-[#25314d] bg-[#f4f0ff] px-4 py-4 text-sm leading-7 text-slate-700 shadow-[0_4px_0_#25314d]" >
207224 Keep outputs and validation artifacts tied to the same local package.
208225 </ div >
209226 </ div >
0 commit comments