Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
403 commits
Select commit Hold shift + click to select a range
aacdb35
Merge pull request #3 from piyushmahajan7749/feature/shadowai-project…
piyushmahajan7749 Mar 21, 2026
fdc6cc3
build fixes chat layout
piyushmahajan7749 Apr 15, 2026
4ed7140
new ui - wip
piyushmahajan7749 Apr 15, 2026
f465501
fixes
piyushmahajan7749 Apr 15, 2026
b3e4754
new working flow
piyushmahajan7749 Apr 15, 2026
06f1de8
db updates
piyushmahajan7749 Apr 15, 2026
1530d2a
delete files
piyushmahajan7749 Apr 15, 2026
0dcb91f
fix for login
piyushmahajan7749 Apr 16, 2026
804cd8c
fix
piyushmahajan7749 Apr 16, 2026
cb855b1
cookie storage fix
piyushmahajan7749 Apr 16, 2026
78acf0b
design generation fixes
piyushmahajan7749 Apr 17, 2026
50e7059
provide papers as context
piyushmahajan7749 Apr 17, 2026
e3f65c6
agentic edit
piyushmahajan7749 Apr 17, 2026
eb8a112
agent chat button
piyushmahajan7749 Apr 17, 2026
d11b137
updated agent flow
piyushmahajan7749 Apr 17, 2026
5c659c9
bbn
piyushmahajan7749 Apr 17, 2026
969f677
report update
piyushmahajan7749 Apr 17, 2026
6eef248
timeout issues, loading, db schema, chats
piyushmahajan7749 Apr 18, 2026
ae236d8
use componenets
piyushmahajan7749 Apr 18, 2026
7f658ab
updated design assembly
piyushmahajan7749 Apr 18, 2026
c909839
design changes
piyushmahajan7749 Apr 18, 2026
da94c66
tightended rules
piyushmahajan7749 Apr 18, 2026
08cd763
bug fixes
piyushmahajan7749 Apr 19, 2026
cdaaa9b
design overall
piyushmahajan7749 Apr 22, 2026
ab74ab7
pr 2
piyushmahajan7749 Apr 22, 2026
ca7e9c4
design overhaul
piyushmahajan7749 Apr 22, 2026
9ebdec8
font updates
piyushmahajan7749 Apr 22, 2026
5129490
bug fixes
piyushmahajan7749 Apr 22, 2026
62c79c7
bug fixes
piyushmahajan7749 Apr 23, 2026
b8da282
working updates for report
piyushmahajan7749 Apr 24, 2026
617a21f
security updates
piyushmahajan7749 Apr 24, 2026
1f80631
login issue
piyushmahajan7749 Apr 28, 2026
5d29b62
default lopgion
piyushmahajan7749 Apr 28, 2026
cfe1ad1
update ingest
piyushmahajan7749 Apr 28, 2026
638e75e
new design
piyushmahajan7749 Apr 28, 2026
4affd1b
updates
piyushmahajan7749 May 3, 2026
42e24d8
chat context
piyushmahajan7749 May 3, 2026
c043fbc
update types
piyushmahajan7749 May 3, 2026
7a82ae7
build fix
piyushmahajan7749 May 3, 2026
0fc7830
chat fix
piyushmahajan7749 May 3, 2026
042b7df
fix: project-files list 500 — sort in-memory to drop composite index
piyushmahajan7749 May 3, 2026
3c28b56
fiel changes
piyushmahajan7749 May 3, 2026
36d0122
file deug
piyushmahajan7749 May 3, 2026
f70713e
chat fixes
piyushmahajan7749 May 4, 2026
cda56de
chat fixes
piyushmahajan7749 May 4, 2026
bbc4284
chat fix
piyushmahajan7749 May 4, 2026
6c31b47
ui chat fixes
piyushmahajan7749 May 4, 2026
e821b52
first batch
piyushmahajan7749 May 12, 2026
fd1e284
second atch
piyushmahajan7749 May 12, 2026
30a6095
batch 3
piyushmahajan7749 May 12, 2026
b376c79
batch d
piyushmahajan7749 May 12, 2026
39b464d
lint issues
piyushmahajan7749 May 12, 2026
4f793ad
Design review batch: dates, status, papers, hypothesis, prompts
piyushmahajan7749 May 13, 2026
114dffa
Design review batch 2: slabs, reports, charts, exports, chat
piyushmahajan7749 May 15, 2026
f99dbc0
Bump inngest to 3.54.2
piyushmahajan7749 May 15, 2026
c4a6eae
Adopt new helix logo + retune palette to logo hues
piyushmahajan7749 May 16, 2026
f1f132c
B2C-ready auth + first-run walkthrough
piyushmahajan7749 May 16, 2026
70038d6
Fix blank saved chat + missing files (#24 follow-up)
piyushmahajan7749 May 16, 2026
e8fd39d
Paper-finder: per-step progress, review filter, problem-aware summaries
piyushmahajan7749 May 16, 2026
b2aaf78
Fix /onboarding redirect loop
piyushmahajan7749 May 16, 2026
b6b6789
Bundle fonts locally via next/font/local
piyushmahajan7749 May 16, 2026
ce85f99
Scope onboarding field chips to biotech / life-sciences
piyushmahajan7749 May 16, 2026
de9adad
Jarvis: dashboard home assistant with markdown-vault memory
piyushmahajan7749 May 16, 2026
a12d92e
Jarvis: tool calls, cross-workspace snapshot, brief, memory drawer
piyushmahajan7749 May 16, 2026
833ed76
Slab cleanup + designs filters + dialog fixes (batch 1 of bug-list)
piyushmahajan7749 May 16, 2026
8ea61a3
Reports page filters + templates store + custom sections (batch 2)
piyushmahajan7749 May 16, 2026
488a554
Reports + chat batch 3: save-as-template, +add-section, lockdown, cha…
piyushmahajan7749 May 16, 2026
e3af468
Paper-finder: diagnose upstream + clearer down-banner
piyushmahajan7749 May 16, 2026
8c085f9
Jarvis chat: drop design/report creation from chat path
piyushmahajan7749 May 18, 2026
9eeb64b
Literature scout: clean queries + block fabricated citations on zero …
piyushmahajan7749 May 18, 2026
1ffdf03
Literature scout: pre-warm with keyless sources to survive PaperFinde…
piyushmahajan7749 May 18, 2026
51f37e4
Literature scout: add OpenAlex as a keyless parallel source
piyushmahajan7749 May 18, 2026
bd97cd7
mm fx
piyushmahajan7749 May 18, 2026
07bf81d
feat(lit-scout): richer progress commentary during the 90s+ search run
piyushmahajan7749 May 18, 2026
b0bb3c5
perf(lit-scout): fire PaperFinder rounds in parallel with abort-on-th…
piyushmahajan7749 May 18, 2026
dee5ee1
StartChatModal: hard-cap width so long titles can't blow out the dialog
piyushmahajan7749 May 19, 2026
98a2b02
feat(lit-scout): granular loader funnel + Show More pagination + 'fro…
piyushmahajan7749 May 19, 2026
52d2186
fix(lit-scout): restore Search-for-more fallback when pagination exha…
piyushmahajan7749 May 19, 2026
580b646
fix(paper-finder): bump default fetch timeout 30s → 150s to match S2 …
piyushmahajan7749 May 19, 2026
d930116
fix(lit-scout): source-tag classification + pre-warm 60s stall
piyushmahajan7749 May 19, 2026
8fe2469
fix(lit-scout): remove abort-on-threshold — let all parallel rounds c…
piyushmahajan7749 May 19, 2026
0cda8dd
feat(lit-scout): LLM-based search-query generator (replaces heuristic…
piyushmahajan7749 May 19, 2026
44de8ab
fix(lit-scout): normalizeSource recognizes the new paper-finder arms
piyushmahajan7749 May 19, 2026
9a9ce1e
fix(lit-scout): always run PaperFinder when queries are present (drop…
piyushmahajan7749 May 19, 2026
c3d6d9e
refactor(dashboard): strip chat surfaces, fix paging, attribute repor…
piyushmahajan7749 May 21, 2026
0a2c8c6
feat(designs): generate reports from a design with AI data-completene…
piyushmahajan7749 May 21, 2026
496d9ae
refactor(reports): attribute to designs, drop templates tab + standal…
piyushmahajan7749 May 21, 2026
e89e691
feat(chat): design-scoped chat rail + all-designs landing, lock compl…
piyushmahajan7749 May 21, 2026
e8fa3f5
fix(reports): drop protocol field, data-files-first, remove Add section
piyushmahajan7749 May 22, 2026
d6752c6
feat(lit-scout): save icon, drop %match, sort relabel, plain-language…
piyushmahajan7749 May 22, 2026
aa6cbc7
fix(design): in-design chat reliability + hypothesis-generation race
piyushmahajan7749 May 22, 2026
2f613b5
feat(dashboard): nest nav, reports stat counts, direct new-design, ge…
piyushmahajan7749 May 22, 2026
0a0e3c5
feat(library): saved-papers Library page grouped by design
piyushmahajan7749 May 22, 2026
f9013eb
feat(chats): general-chats-only list with name/question/source, drop …
piyushmahajan7749 May 22, 2026
21a4a31
fix(design+chat): all-designs chat constraint, hide hypothesis scores…
piyushmahajan7749 May 23, 2026
41ec9b2
fix(design+chats): live status update; chats reword + per-chat delete
piyushmahajan7749 May 23, 2026
146fd4f
feat(design): report 3-state button + template name; download design …
piyushmahajan7749 May 23, 2026
b80b5cb
feat(onboarding): design-focused new-user walkthrough
piyushmahajan7749 May 23, 2026
31c40d5
fix(lit-scout): bias OpenAlex search to primary research (exclude rev…
piyushmahajan7749 May 23, 2026
1c2479c
feat(design): leave-window warning, lit-page persistence + sort fix, …
piyushmahajan7749 Jun 1, 2026
e4419b3
feat(onboarding): spotlight product tour with floating tooltips
piyushmahajan7749 Jun 1, 2026
8985234
feat(chats): include per-design rail chats, badge with their design
piyushmahajan7749 Jun 4, 2026
1b29593
feat(onboarding+design): tighten tour, walk through lit→hyp→design, a…
piyushmahajan7749 Jun 4, 2026
9bd7113
feat(design-chat): chat-driven edits with Approve / Reject diff cards
piyushmahajan7749 Jun 4, 2026
d3ebb75
feat(model): switch to gpt-5.5 via SDK-level shim (temperature=1 enfo…
piyushmahajan7749 Jun 4, 2026
a95f1e6
debug(lit-scout): noisy catches + /api/debug/azure-probe diagnostic
piyushmahajan7749 Jun 4, 2026
65ef32e
fix(lit-scout): gpt-5.5 reasoning_effort=low + parallelize relevance …
piyushmahajan7749 Jun 4, 2026
c487181
chore: nudge Vercel to pick up 65ef32e (reasoning_effort=low + maxDur…
piyushmahajan7749 Jun 4, 2026
fc6467d
update
piyushmahajan7749 Jun 4, 2026
b4c2119
fix(vercel): keep maxDuration at 300s (plan limit)
piyushmahajan7749 Jun 4, 2026
5933787
feat(billing): token metering schema + core + server-side wiring
piyushmahajan7749 Jun 5, 2026
c7bf10a
feat(billing): RevenueCat endpoints, Usage & Billing settings UI, 402 UX
piyushmahajan7749 Jun 5, 2026
b4d0fe5
chore(billing): use non-deprecated Purchases.configure({apiKey,appUse…
piyushmahajan7749 Jun 5, 2026
8680dc8
fix(azure): floor max_completion_tokens for gpt-5.x reasoning models
piyushmahajan7749 Jun 6, 2026
98f8194
fix(rag): stop sweeping file sources into the unservable changed-even…
piyushmahajan7749 Jun 6, 2026
447fea6
feat(design): run design generation as a background Inngest job
piyushmahajan7749 Jun 6, 2026
7b81c24
feat(design): run literature + hypotheses phases in background too
piyushmahajan7749 Jun 6, 2026
2e8f9c7
test(design): core-flow integration tests + CI gate
piyushmahajan7749 Jun 6, 2026
89f66ab
test(report): report output-contract guard + extract schemas
piyushmahajan7749 Jun 6, 2026
f6b6789
feat(sharing): let invited editors run the design pipeline
piyushmahajan7749 Jun 6, 2026
c935861
feat(sharing): wire Share dialog + read-only mode into the live editor
piyushmahajan7749 Jun 6, 2026
621055c
feat(sharing): collaborator entry points — resolver, invite link, sha…
piyushmahajan7749 Jun 6, 2026
8ed1e6d
updated comment
piyushmahajan7749 Jun 6, 2026
c60a7bc
fix(design-chat): keep scoped-chat prompt under the chats_prompt_chec…
piyushmahajan7749 Jun 11, 2026
327299f
fix(design-view): full-width design tab, declutter actions, real PDF …
piyushmahajan7749 Jun 11, 2026
2b4f4ad
fix(sharing): render the real design on the public share link
piyushmahajan7749 Jun 11, 2026
d64e37f
fix(sharing): make invite email actually deliver + report failures ho…
piyushmahajan7749 Jun 11, 2026
80518d5
fix(design-pdf): render markdown tables as real tables (jspdf-autotable)
piyushmahajan7749 Jun 11, 2026
028164a
fix(design-chat): use the design context + stop the bogus file-retrieval
piyushmahajan7749 Jun 11, 2026
16f3cee
feat(launch): billing safety + payment idempotency + onboarding cleanup
piyushmahajan7749 Jun 11, 2026
442f7dd
fix(design-chat): stop dropping the user's message (the "Ready." bug)
piyushmahajan7749 Jun 11, 2026
cecf2cf
feat(design-chat): taller, resizable chat rail
piyushmahajan7749 Jun 11, 2026
941e53c
fix(design-chat): harden AI-edit apply (tolerant find/heading match)
piyushmahajan7749 Jun 11, 2026
861eb09
feat(affiliate): influencer creator program (codes, referrals, comp, …
piyushmahajan7749 Jun 15, 2026
c4f6256
feat(affiliate): self-serve creator application flow
piyushmahajan7749 Jun 16, 2026
672cffb
feat(nav): streamline sidebar to Dashboard / Projects / Recents
piyushmahajan7749 Jun 18, 2026
d194d64
feat(design): testing-pass fixes across library, problem, literature,…
piyushmahajan7749 Jun 18, 2026
3f8bca9
feat(nav): designs-first IA — sidebar to projects only, reports/chats…
piyushmahajan7749 Jun 19, 2026
cd6e2a4
fix(design): literature junk filter + prompt tuning (additional-detai…
piyushmahajan7749 Jun 23, 2026
cd56621
fix(design-chat): readable patch popup, no double-approval, scoped ba…
piyushmahajan7749 Jun 23, 2026
861bd5f
feat(project): per-design report button + status, and full-screen "St…
piyushmahajan7749 Jun 23, 2026
4911078
fix(literature): real year + citation metadata so relevance/latest so…
piyushmahajan7749 Jun 23, 2026
9e8d750
fix(design): unstick reopened designs + bulletproof chat back button
piyushmahajan7749 Jun 23, 2026
85c03c3
fix(design-chat): apply edits server-side from anywhere (no navigatio…
piyushmahajan7749 Jun 23, 2026
fc11bed
feat(design): "Refine" clarifying-question step (problem→literature, …
piyushmahajan7749 Jun 24, 2026
ee01d4b
feat(onboarding): 3-slide welcome → Google/email signup → guided firs…
piyushmahajan7749 Jun 24, 2026
19a2d17
feat(billing): free-tier experiment paywall (3 free generated designs…
piyushmahajan7749 Jun 24, 2026
869a3bf
types
piyushmahajan7749 Jun 24, 2026
5bcff4f
feat(onboarding): interactive guided tour that DRIVES the app (not a …
piyushmahajan7749 Jun 24, 2026
99ee6d4
fix(design): Refine step fell through to literature — clarify route t…
piyushmahajan7749 Jun 24, 2026
679252d
feat(design): simplify New-design form to just Problem statement + Ob…
piyushmahajan7749 Jun 24, 2026
b2e9b30
feat(settings): Claude-style left-nav settings modal; remove API Keys
piyushmahajan7749 Jun 25, 2026
f93b327
feat(onboarding): engaging split-hero welcome with animated product p…
piyushmahajan7749 Jun 25, 2026
34dbdb0
fix(nav): design back→project, dashboard design→overview, chat back→d…
piyushmahajan7749 Jun 25, 2026
a711f51
feat(design): prominent Reports/Chats/Files tabs; slab Report button …
piyushmahajan7749 Jun 25, 2026
5ecc088
feat(refine): three clarifying-question gates (problem, hypothesis, d…
piyushmahajan7749 Jun 25, 2026
c554221
fix(design-chat): apply-change actually persists; warn before overrid…
piyushmahajan7749 Jun 25, 2026
8266b8b
feat(design): undo last chat-applied change
piyushmahajan7749 Jun 25, 2026
cd7a694
refactor(design): streamline sections to remove repetition
piyushmahajan7749 Jun 25, 2026
33864cb
feat(design): Overview "Create" section — Bench guide / Rationale & c…
piyushmahajan7749 Jun 25, 2026
6f1ce01
feat(report): Overview as a scientific-poster one-pager
piyushmahajan7749 Jun 25, 2026
b54756b
feat(settings): Lab standards & defaults, Notifications, Data & account
piyushmahajan7749 Jun 25, 2026
daa0895
feat(report): ask clarifying questions before generating
piyushmahajan7749 Jun 25, 2026
f9c0798
feat(onboarding): signup copy, new role/field options, multi-select u…
piyushmahajan7749 Jun 26, 2026
742e8e9
fix(walkthrough): welcome popup, reliable advance, replay button, new…
piyushmahajan7749 Jun 26, 2026
0cd8f44
feat(dashboard): entity-locked slab chips + question-based chat & use…
piyushmahajan7749 Jun 26, 2026
f0a9847
feat(dashboard/report): free-designs-left, context-aware back, drop r…
piyushmahajan7749 Jun 26, 2026
cf4dca0
fix(onboarding): drop role/use_case CHECK constraints blocking new op…
piyushmahajan7749 Jun 26, 2026
ab80d9c
feat(analytics): add Vercel Analytics across landing, auth, onboardin…
piyushmahajan7749 Jun 27, 2026
81405e0
feat(seo): SEO + GEO overhaul — metadata, JSON-LD, sitemap, robots, h…
piyushmahajan7749 Jun 27, 2026
b843733
feat(blog): add /blog with 10 SEO-targeted posts for life sciences re…
piyushmahajan7749 Jun 27, 2026
a6fb1cb
fix(domain): replace shadowai.today → shadowai.work across sitemap, l…
piyushmahajan7749 Jun 27, 2026
7206a57
fix(design-flow): 11 UX bugs — nav, persistence, clarify, and dialog
piyushmahajan7749 Jun 29, 2026
d584cf4
feat(design-workspace): redesign layout — left chat, Library sidebar,…
piyushmahajan7749 Jun 29, 2026
2fbe585
feat(design-workspace): full-height chat + library columns, functiona…
piyushmahajan7749 Jun 30, 2026
c59d429
feat(share): Google-Drive-style share dialog — collaborators + link, …
piyushmahajan7749 Jun 30, 2026
0f2bd6e
fix(design-workspace): chat resize + smaller default, overlay Library…
piyushmahajan7749 Jun 30, 2026
2cefbb2
feat(design-library): wire each widget to a distinct artifact
piyushmahajan7749 Jun 30, 2026
769547b
feat(design-workspace): chat overlays page; approving a change jumps …
piyushmahajan7749 Jun 30, 2026
8165e16
feat(admin): password-gated signup/growth dashboard + fix affiliate-m…
piyushmahajan7749 Jul 6, 2026
91c07f7
feat(design): Validate-and-iterate stage — test hypothesis vs lab dat…
piyushmahajan7749 Jul 7, 2026
ba586b7
feat(validate): parse lab data → show structured table + summary befo…
piyushmahajan7749 Jul 7, 2026
3cb29b9
feat(validate): vision parsing — read gel photos / screenshots / scan…
piyushmahajan7749 Jul 7, 2026
fd5807c
fix(validate): surface the real parse failure instead of a generic me…
piyushmahajan7749 Jul 8, 2026
f6321fa
fix(validate): add 300s maxDuration for the validate route (was 504-ing)
piyushmahajan7749 Jul 8, 2026
dcef36c
feat(clarify): tune per-checkpoint questions + honor free text; steer…
piyushmahajan7749 Jul 9, 2026
309b7c6
feat(validate 5b): selectable suggested changes → generate new design…
piyushmahajan7749 Jul 9, 2026
6452802
feat(validate 5a): pre-lab simulation loop — predict vs target, optim…
piyushmahajan7749 Jul 9, 2026
fff2bb0
feat(validate 6): design chat reasons across the full iteration series
piyushmahajan7749 Jul 9, 2026
8309fe0
feat(validate): modeled Monte-Carlo simulation — write+run real sim c…
piyushmahajan7749 Jul 9, 2026
c67032d
chore: trigger prod rebuild (pick up env changes)
piyushmahajan7749 Jul 12, 2026
f2e0d36
fix(clarify+literature): bench-only, problem-focused search, methodol…
piyushmahajan7749 Jul 13, 2026
74e7654
feat(design): rename Library→Export, add design-iteration picker; ite…
piyushmahajan7749 Jul 13, 2026
fcd99cf
revert(design): remove the Refine questioning flow from the whole pip…
piyushmahajan7749 Jul 16, 2026
654a080
feat(clarify): restore Refine for hypothesis + design; literature sta…
piyushmahajan7749 Jul 17, 2026
98c92f2
feat(design): testing-round fixes — examined count, auto-generate, cl…
piyushmahajan7749 Jul 17, 2026
e09852f
fix(design): paper mix, examined count, assay-aware material Qs, real…
piyushmahajan7749 Jul 19, 2026
6598dac
feat(design): Next -> decision page (finalise vs simulate); add Itera…
piyushmahajan7749 Jul 19, 2026
d30fdc9
feat(design): split Validate/Iterate, add iteration rail + data charts
piyushmahajan7749 Jul 19, 2026
452ecb4
fix(literature): Tavily web arm was 422-ing on every single call
piyushmahajan7749 Jul 20, 2026
96d4750
fix(literature): raise PaperFinder client timeout 150s -> 240s
piyushmahajan7749 Jul 20, 2026
99f0cf7
fix(literature): keep the scout inside the 300s function cap (was 504…
piyushmahajan7749 Jul 21, 2026
10eaf4d
fix(literature): raise Inngest function ceiling to 600s; stop capping…
piyushmahajan7749 Jul 21, 2026
7e0ccba
feat(literature): fan-out/fan-in the scout across Inngest steps (chec…
piyushmahajan7749 Jul 21, 2026
1bf3756
feat(design): Auto mode + Effort controls on the create-design modal
piyushmahajan7749 Jul 21, 2026
c8d1c5c
feat(design): raise paper targets per effort level (15/30/50/75/100)
piyushmahajan7749 Jul 21, 2026
74f806a
fix(inngest): cap function at 300s to fit plan; lit round timeout 420…
piyushmahajan7749 Jul 21, 2026
ca73517
feat(design): full-auto sim+iterate, hypothesis Suggested/Own tabs, p…
piyushmahajan7749 Jul 24, 2026
12a00f8
fix(literature): clean web page-title furniture, label OpenAlex, stop…
piyushmahajan7749 Jul 28, 2026
8d0f247
feat(hypotheses): fix cross-agent convergence, add generated hypothes…
piyushmahajan7749 Jul 28, 2026
a570399
fix(hypotheses): dedicated generating screen, clear stale selection, …
piyushmahajan7749 Jul 28, 2026
d5f56a2
fix(design): stable version numbering; browse versions read-only inst…
piyushmahajan7749 Jul 28, 2026
2f15add
fix(design): unlock Iterate after any validate action, reorder export…
piyushmahajan7749 Jul 28, 2026
adf0f3f
feat(design): short working title from the objective, shown on the re…
piyushmahajan7749 Jul 28, 2026
b5f1a8f
fix: refine Continue button reachable, one-ask questions, true examin…
piyushmahajan7749 Jul 30, 2026
535c2b0
fix(literature): recover titles from markdown; choice-first hypothese…
piyushmahajan7749 Aug 8, 2026
f482237
fix(literature): drop empty S2 shells, guard 'None' markdown titles
piyushmahajan7749 Aug 8, 2026
f3ded53
feat(design): assumption ledger - the scientist's judgement decides, …
piyushmahajan7749 Aug 8, 2026
a9ac63d
fix(validate): score the simulation on the researcher's main problem,…
piyushmahajan7749 Aug 8, 2026
6dd103c
copy(hypotheses): rename "Suggested hypotheses" to "Generated hypothe…
piyushmahajan7749 Aug 8, 2026
0ac8ef4
fix(validate): stop the verdict, the prose and the numbers disagreeing
piyushmahajan7749 Aug 8, 2026
3b4a2f4
refactor(reports): extract the report editor so a modal can host it
piyushmahajan7749 Aug 8, 2026
f47c487
feat(reports): generate, edit and manage reports inside the Export modal
piyushmahajan7749 Aug 8, 2026
89720b3
feat(design): fold Validate + Iterate into one modal launched from th…
piyushmahajan7749 Aug 8, 2026
0e3c435
fix(design): move Validate & iterate to the top of the design step
piyushmahajan7749 Aug 8, 2026
e35e28e
fix(reports+design): saved-only assets, Upload to ELN replaces PPT, S…
piyushmahajan7749 Aug 8, 2026
888f257
feat(design): three effort levels; reframe design choices as decision…
piyushmahajan7749 Aug 10, 2026
44ee26c
fix(design+share): share button reachable, validate hidden after save…
piyushmahajan7749 Aug 10, 2026
fd16314
fix(chat): stop false "I applied it" claims, unoverlap the rail contr…
piyushmahajan7749 Aug 10, 2026
f64f8df
feat(design): auto-mode shows just the chosen hypothesis; per-section…
piyushmahajan7749 Aug 10, 2026
46c7286
feat(design): ask the study details up front, once, before anything g…
piyushmahajan7749 Aug 10, 2026
f7f85f6
feat(design): keep each version's verdict and applied changes with th…
piyushmahajan7749 Aug 10, 2026
02beb48
fix(reports): lock the tabs while generating; show save date AND time…
piyushmahajan7749 Aug 10, 2026
c15ef18
fix(reports): Inputs tab leads with the attached files, and they open
piyushmahajan7749 Aug 10, 2026
a862ea7
feat(reports): Overview reads as the whole experiment; chart moves be…
piyushmahajan7749 Aug 10, 2026
9ec8a39
feat(reports): ELN upload locks the report; record which design versi…
piyushmahajan7749 Aug 10, 2026
7ce203f
fix(clarify): feed the researcher's own answers into the question gen…
piyushmahajan7749 Aug 10, 2026
b0e9942
feat(reports): keep every metric in the data, and let the reader swit…
piyushmahajan7749 Aug 10, 2026
5e544a4
feat(design): combinational hypotheses, hard condition ceiling, and a…
piyushmahajan7749 Aug 12, 2026
08c38e8
fix(design): keep working after save, and show every round rather tha…
piyushmahajan7749 Aug 12, 2026
3c57365
fix(reports): the other datasets actually survive now, plus editing a…
piyushmahajan7749 Aug 12, 2026
f2b1495
fix(design): duplicate papers, skipped design questions, and version …
piyushmahajan7749 Aug 12, 2026
b626a8e
feat(design): every version keeps its full simulation, and own hypoth…
piyushmahajan7749 Aug 12, 2026
9cecaa2
fix(chat): design and report chats can actually read your files
piyushmahajan7749 Aug 16, 2026
45aa023
feat(qa): nightly production health check with an emailed digest
piyushmahajan7749 Aug 27, 2026
a0e51ff
merge: design/editorial-overhaul into main
piyushmahajan7749 Aug 27, 2026
26e08b9
test: repair the two stale specs so main lands green
piyushmahajan7749 Aug 27, 2026
00010c2
ci: generate next-env.d.ts before type-check so main can go green
piyushmahajan7749 Aug 27, 2026
ebe8e87
fix(firebase): don't throw from the admin-init catch block
piyushmahajan7749 Aug 27, 2026
7882c77
ci: placeholder server env so the build step can complete
piyushmahajan7749 Aug 27, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
27 changes: 27 additions & 0 deletions .claude/launch.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
{
"version": "0.0.1",
"configurations": [
{
"name": "dev",
"runtimeExecutable": "npm",
"runtimeArgs": ["run", "dev"],
"port": 3000,
"autoPort": true
},
{
"name": "landing",
"runtimeExecutable": "npm",
"runtimeArgs": [
"run",
"dev",
"--prefix",
"/Users/piyush/Projects/shadowailandingpage",
"--",
"--port",
"5180",
"--strictPort"
],
"port": 5180
}
]
}
56 changes: 55 additions & 1 deletion .env.local.example
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,10 @@ NEXT_PUBLIC_SUPABASE_ANON_KEY=
# Supabase Private
SUPABASE_SERVICE_ROLE_KEY=

# Supabase Proxy (set to "true" to route browser requests through your domain)
# Use this if ISPs are blocking supabase.co (e.g. in India)
NEXT_PUBLIC_SUPABASE_PROXY=true

# Ollama
NEXT_PUBLIC_OLLAMA_URL=http://localhost:11434

Expand Down Expand Up @@ -33,4 +37,54 @@ EMAIL_DOMAIN_WHITELIST=
EMAIL_WHITELIST=

# File size limit for uploads in bytes
NEXT_PUBLIC_USER_FILE_SIZE_LIMIT=10485760
NEXT_PUBLIC_USER_FILE_SIZE_LIMIT=10485760

# Rate limiting (Upstash Redis REST)
# Required in production - without these, rate limiting fails open.
# Create a free Redis at https://upstash.com and paste the REST URL/TOKEN.
UPSTASH_REDIS_REST_URL=
UPSTASH_REDIS_REST_TOKEN=

# Inngest signature verification
# Required in production - protects /api/inngest from forged event payloads.
# Grab the signing key from the Inngest dashboard → your app → Keys.
INNGEST_SIGNING_KEY=

# ── Billing / metering ──────────────────────────────────────────────────────
# Token metering ALWAYS records usage (needs SUPABASE_SERVICE_ROLE_KEY above).
# The hard 402 over-limit BLOCK is gated separately so you can launch
# metering-only, validate the credit calibration against real usage, then turn
# enforcement on with no redeploy. Default (unset) = record but never block.
# Set to true/1/on/yes to enforce the cap.
BILLING_ENFORCE=

# Free-tier experiment paywall: free users get FREE_EXPERIMENT_LIMIT (lib/billing
# /plans.ts, default 3) GENERATED designs, then must upgrade. Like BILLING_ENFORCE
# this is count-only by default - set EXPERIMENT_PAYWALL=true/1/on/yes to actually
# BLOCK a 4th design generation for free users (returns 402 EXPERIMENT_LIMIT).
EXPERIMENT_PAYWALL=

# ── RevenueCat (Web Billing) - required for paid plans + credit packs ────────
# Until NEXT_PUBLIC_REVENUECAT_WEB_PUBLIC_KEY is set, the payment path stays
# dormant (Free works; upgrades show "Coming soon"). See BILLING.md for the
# RevenueCat dashboard setup (entitlements pro/max, products, offering, webhook).
NEXT_PUBLIC_REVENUECAT_WEB_PUBLIC_KEY=
NEXT_PUBLIC_REVENUECAT_PRO_PACKAGE=
NEXT_PUBLIC_REVENUECAT_MAX_PACKAGE=
NEXT_PUBLIC_REVENUECAT_CREDITS_PACKAGE=
NEXT_PUBLIC_REVENUECAT_PORTAL_URL=
# Server: must equal the Authorization header set on the RevenueCat webhook.
REVENUECAT_WEBHOOK_AUTH=
# Server: JSON map of one-time credit-pack product id → raw token count,
# e.g. {"credits_20k":20000000}. Required for credit packs to grant anything.
REVENUECAT_CREDIT_PRODUCTS=

# --- Influencer affiliate / creator program --------------------------------
# Shared bearer secret for the operator-only admin endpoints
# (POST /api/admin/affiliate to mint a creator code, POST /api/admin/comp to
# grant a comp Max plan). Fail-closed: if unset, those endpoints reject all
# calls. Generate a long random value and keep it secret.
ADMIN_API_SECRET=
# Public site origin used to build creator share links (e.g.
# https://shadowai.work). Falls back to the request origin if unset.
NEXT_PUBLIC_SITE_URL=
5 changes: 5 additions & 0 deletions .firebaserc
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
{
"projects": {
"default": "shadowai-adcf7"
}
}
102 changes: 102 additions & 0 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,102 @@
name: CI

# Release gate for the core flows. Runs on every PR and on pushes to the
# main + active design branches. Blocks merges if type-check, lint, the test
# suite (incl. the design-pipeline guard in __tests__/design/pipeline.test.ts),
# or the production build break - so create-design → literature → hypotheses →
# design → chat-context can't silently regress.
on:
pull_request:
push:
branches:
- main
- design/editorial-overhaul

# Cancel superseded runs on the same ref to save CI minutes.
concurrency:
group: ci-${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true

jobs:
verify:
name: type-check · lint · test · build
runs-on: ubuntu-latest
timeout-minutes: 20
steps:
- uses: actions/checkout@v4

- uses: actions/setup-node@v4
with:
node-version-file: ".nvmrc"
cache: "npm"

- name: Install dependencies
run: npm ci

# `next-env.d.ts` is gitignored (Next.js regenerates it on build), and it
# is what pulls in `next/image-types/global` - the declarations that make
# `import x from "@/public/foo.png"` type-check. Since this job runs
# type-check BEFORE build, the file does not exist yet and every image
# import fails with TS2307. It passes on a developer machine only because
# a previous build left the file behind, which is exactly the kind of
# "works locally" divergence that had main red for weeks. Write the file
# Next would generate, verbatim, before type-checking.
- name: Generate Next.js type references
run: |
cat > next-env.d.ts <<'TYPES'
/// <reference types="next" />
/// <reference types="next/image-types/global" />

// NOTE: This file should not be edited
// see https://nextjs.org/docs/app/building-your-application/configuring/typescript for more information.
TYPES

# Deterministic, env-free gates - catch the regressions that have bitten
# the design pipeline (types, wiring, dropped fields, bad merges).
- name: Type check
run: npm run type-check

- name: Lint
run: npm run lint

- name: Test
run: npm test

# Production build - catches issues tsc can't (e.g. edge-runtime bundling).
#
# `next build` collects page data for every API route, which imports each
# route's module graph and runs its top-level initializers. Several of
# those throw outright when their key is absent (the SerpApi client is the
# loudest), so the original assumption here - that "the build reads real
# secrets only at request time" - does not hold, and the build died in a
# clean checkout. These placeholders exist purely to get those
# initializers past construction; nothing is called, so the values are
# never used for anything. Real credentials still belong in the runtime
# environment, not here.
- name: Build
run: npm run build
env:
# Server-side keys whose clients construct at module load.
SERPAPI_API_KEY: "placeholder-serpapi-key"
SUPABASE_SERVICE_ROLE_KEY: "placeholder-service-role-key"
AZURE_OPENAI_ENDPOINT: "https://placeholder.openai.azure.com"
AZURE_OPENAI_KEY: "placeholder-azure-key"
AZURE_OPENAI_API_KEY: "placeholder-azure-key"
AZURE_OPENAI_DEPLOYMENT: "placeholder-deployment"
AZURE_OPENAI_DESIGN_DEPLOYMENT: "placeholder-deployment"
OPENAI_API_KEY: "placeholder-openai-key"
ANTHROPIC_API_KEY: "placeholder-anthropic-key"
RESEND_API_KEY: "placeholder-resend-key"
INNGEST_SIGNING_KEY: "signkey-prod-placeholder"
INNGEST_EVENT_KEY: "placeholder-event-key"
FIREBASE_PROJECT_ID: "placeholder-project"
FIREBASE_CLIENT_EMAIL: "placeholder@placeholder.iam.gserviceaccount.com"
FIREBASE_PRIVATE_KEY: "-----BEGIN PRIVATE KEY-----\nplaceholder\n-----END PRIVATE KEY-----\n"
NEXT_PUBLIC_SUPABASE_URL: "https://placeholder.supabase.co"
NEXT_PUBLIC_SUPABASE_ANON_KEY: "placeholder-anon-key"
NEXT_PUBLIC_FIREBASE_API_KEY: "placeholder"
NEXT_PUBLIC_FIREBASE_AUTH_DOMAIN: "placeholder.firebaseapp.com"
NEXT_PUBLIC_FIREBASE_PROJECT_ID: "placeholder"
NEXT_PUBLIC_FIREBASE_STORAGE_BUCKET: "placeholder.appspot.com"
NEXT_PUBLIC_FIREBASE_MESSAGING_SENDER_ID: "0000000000"
NEXT_PUBLIC_FIREBASE_APP_ID: "1:0:web:0"
98 changes: 98 additions & 0 deletions .github/workflows/nightly-qa.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,98 @@
name: Nightly QA

# Full production health check: can a person sign up, sign in, create a design,
# and does the science pipeline still produce papers, hypotheses, a design and
# a report? Runs against the live deployment, because a health check that
# passes on localhost while production is down is worse than none.
on:
schedule:
# 02:30 UTC == 08:00 IST. Off-peak for Azure quota, and the result is
# waiting in the inbox at the start of the working day.
- cron: "30 2 * * *"
workflow_dispatch:
inputs:
base_url:
description: "Deployment to test (defaults to production)"
required: false
default: ""
suite:
description: "Which projects to run"
required: false
default: "all"
type: choice
options: ["all", "smoke"]
# "smoke" runs everything except the expensive AI pipeline.

# Never let two nightly runs overlap - they share one QA account and workspace.
concurrency:
group: nightly-qa
cancel-in-progress: false

jobs:
qa:
name: Production health check
runs-on: ubuntu-latest
# The pipeline project alone can run 25+ minutes; this is the hard stop.
timeout-minutes: 75

steps:
- uses: actions/checkout@v4

- uses: actions/setup-node@v4
with:
node-version-file: ".nvmrc"
cache: "npm"

- name: Install dependencies
run: npm ci

- name: Install Playwright Chromium
run: npx playwright install --with-deps chromium

- name: Run QA suite
id: qa
# Keep going on failure: the digest step below is the whole point, and
# it must run precisely when the tests did NOT pass.
continue-on-error: true
env:
CI: "true"
E2E_BASE_URL: ${{ github.event.inputs.base_url || vars.E2E_BASE_URL || 'https://app.shadowai.work' }}
E2E_EMAIL: ${{ secrets.E2E_EMAIL }}
E2E_PASSWORD: ${{ secrets.E2E_PASSWORD }}
E2E_SIGNUP_DOMAIN: ${{ vars.E2E_SIGNUP_DOMAIN || 'shadowai.work' }}
NEXT_PUBLIC_SUPABASE_URL: ${{ secrets.E2E_SUPABASE_URL }}
SUPABASE_SERVICE_ROLE_KEY: ${{ secrets.SUPABASE_SERVICE_ROLE_KEY }}
run: |
if [ "${{ github.event.inputs.suite }}" = "smoke" ]; then
npx playwright test --config e2e/playwright.config.ts --project=public --project=smoke
else
npx playwright test --config e2e/playwright.config.ts
fi

- name: Upload Playwright report
if: always()
uses: actions/upload-artifact@v4
with:
name: playwright-report
path: |
playwright-report/
e2e-results.json
retention-days: 14

- name: Email the digest
if: always()
env:
RESEND_API_KEY: ${{ secrets.RESEND_API_KEY }}
QA_REPORT_TO: ${{ secrets.QA_REPORT_TO }}
EMAIL_FROM_ADDRESS: ${{ vars.EMAIL_FROM_ADDRESS }}
E2E_BASE_URL: ${{ github.event.inputs.base_url || vars.E2E_BASE_URL || 'https://app.shadowai.work' }}
GITHUB_RUN_URL: ${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }}
run: node e2e/reporter/send-digest.mjs e2e-results.json

# The digest has been sent by now, so it is safe to fail the job and turn
# the Actions badge red.
- name: Fail the job if any check failed
if: steps.qa.outcome != 'success'
run: |
echo "::error::Nightly QA failed - see the emailed digest or the playwright-report artefact."
exit 1
10 changes: 10 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -44,3 +44,13 @@ sw.js
sw.js.map
workbox-*.js
workbox-*.js.map

# Supabase Studio scratch (local-only SQL snippets the IDE saves)
supabase/snippets/
.env*

# Nightly QA (Playwright) artefacts
e2e/.auth/
playwright-report/
e2e-results.json
test-results/
15 changes: 15 additions & 0 deletions .vscode/launch.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
{
// Use IntelliSense to learn about possible attributes.
// Hover to view descriptions of existing attributes.
// For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
"version": "0.2.0",
"configurations": [
{
"type": "chrome",
"request": "launch",
"name": "Launch Chrome against localhost",
"url": "http://localhost:8080",
"webRoot": "${workspaceFolder}"
}
]
}
Loading