caustino commited on
Commit
bb8c446
·
verified ·
1 Parent(s): 04a6d7a

Upload 20 files

Browse files
.env.local ADDED
@@ -0,0 +1 @@
 
 
1
+ GEMINI_API_KEY=PLACEHOLDER_API_KEY
.gitignore ADDED
@@ -0,0 +1,24 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # Logs
2
+ logs
3
+ *.log
4
+ npm-debug.log*
5
+ yarn-debug.log*
6
+ yarn-error.log*
7
+ pnpm-debug.log*
8
+ lerna-debug.log*
9
+
10
+ node_modules
11
+ dist
12
+ dist-ssr
13
+ *.local
14
+
15
+ # Editor directories and files
16
+ .vscode/*
17
+ !.vscode/extensions.json
18
+ .idea
19
+ .DS_Store
20
+ *.suo
21
+ *.ntvs*
22
+ *.njsproj
23
+ *.sln
24
+ *.sw?
App.tsx ADDED
@@ -0,0 +1,118 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+
2
+ import React, { useState, useCallback } from 'react';
3
+ import { CaseIntakeForm } from './components/CaseIntakeForm';
4
+ import { ActionPlanComponent } from './components/ActionPlan';
5
+ import { generateActionPlan } from './services/geminiService';
6
+ import type { ActionPlan, CaseData, ActionItemStatus } from './types';
7
+ import { Spinner } from './components/icons/Spinner';
8
+
9
+ const App: React.FC = () => {
10
+ const [view, setView] = useState<'form' | 'plan'>('form');
11
+ const [actionPlan, setActionPlan] = useState<ActionPlan | null>(null);
12
+ const [isLoading, setIsLoading] = useState<boolean>(false);
13
+ const [error, setError] = useState<string | null>(null);
14
+
15
+ const handleFormSubmit = useCallback(async (data: CaseData) => {
16
+ setIsLoading(true);
17
+ setError(null);
18
+ try {
19
+ const plan = await generateActionPlan(data);
20
+ setActionPlan(plan);
21
+ setView('plan');
22
+ } catch (err) {
23
+ console.error(err);
24
+ setError('Failed to generate an action plan. Please check your API key and try again.');
25
+ } finally {
26
+ setIsLoading(false);
27
+ }
28
+ }, []);
29
+
30
+ const handleToggleItem = useCallback((categoryIndex: number, itemIndex: number) => {
31
+ setActionPlan(prevPlan => {
32
+ if (!prevPlan) return null;
33
+
34
+ const newPlan = JSON.parse(JSON.stringify(prevPlan));
35
+ const currentStatus = newPlan.categories[categoryIndex].items[itemIndex].status;
36
+
37
+ const newStatus: ActionItemStatus = currentStatus === 'Completed' ? 'Not Started' : 'Completed';
38
+ newPlan.categories[categoryIndex].items[itemIndex].status = newStatus;
39
+
40
+ return newPlan;
41
+ });
42
+ }, []);
43
+
44
+ const handleReset = useCallback(() => {
45
+ setView('form');
46
+ setActionPlan(null);
47
+ setError(null);
48
+ }, []);
49
+
50
+ return (
51
+ <div className="min-h-screen bg-gray-950">
52
+ <div className="relative isolate overflow-hidden">
53
+ <svg
54
+ className="absolute inset-0 -z-10 h-full w-full stroke-white/10 [mask-image:radial-gradient(100%_100%_at_top_right,white,transparent)]"
55
+ aria-hidden="true"
56
+ >
57
+ <defs>
58
+ <pattern
59
+ id="983e3e4c-de6d-4c3f-8d64-b9761d1534cc"
60
+ width={200}
61
+ height={200}
62
+ x="50%"
63
+ y={-1}
64
+ patternUnits="userSpaceOnUse"
65
+ >
66
+ <path d="M.5 200V.5H200" fill="none" />
67
+ </pattern>
68
+ </defs>
69
+ <svg x="50%" y={-1} className="overflow-visible fill-gray-800/20">
70
+ <path
71
+ d="M-200 0h201v201h-201Z M600 0h201v201h-201Z M-400 600h201v201h-201Z M200 800h201v201h-201Z"
72
+ strokeWidth={0}
73
+ />
74
+ </svg>
75
+ <rect width="100%" height="100%" strokeWidth={0} fill="url(#983e3e4c-de6d-4c3f-8d64-b9761d1534cc)" />
76
+ </svg>
77
+ </div>
78
+ <main className="container mx-auto px-4 py-8 md:py-16">
79
+ <header className="text-center mb-12">
80
+ <h1 className="font-display text-4xl md:text-6xl font-bold tracking-tight text-white">
81
+ SSDI Case Prep <span className="text-brand-secondary">Assistant</span>
82
+ </h1>
83
+ <p className="mt-4 text-lg text-gray-400 max-w-2xl mx-auto">
84
+ Your AI-powered guide to organizing and strengthening your Social Security Disability claim.
85
+ </p>
86
+ </header>
87
+
88
+ {isLoading && (
89
+ <div className="fixed inset-0 bg-gray-950 bg-opacity-80 flex flex-col items-center justify-center z-50">
90
+ <Spinner />
91
+ <p className="mt-4 text-white text-lg font-medium">Generating your personalized action plan...</p>
92
+ <p className="mt-2 text-gray-400">This may take a moment. The AI is analyzing your case details.</p>
93
+ </div>
94
+ )}
95
+
96
+ {error && (
97
+ <div className="bg-red-900/50 border border-red-700 text-red-300 px-4 py-3 rounded-lg relative max-w-2xl mx-auto" role="alert">
98
+ <strong className="font-bold">Error: </strong>
99
+ <span className="block sm:inline">{error}</span>
100
+ </div>
101
+ )}
102
+
103
+ <div className="max-w-4xl mx-auto">
104
+ {view === 'form' && !actionPlan ? (
105
+ <CaseIntakeForm onSubmit={handleFormSubmit} />
106
+ ) : (
107
+ actionPlan && <ActionPlanComponent plan={actionPlan} onToggleItem={handleToggleItem} onReset={handleReset} />
108
+ )}
109
+ </div>
110
+ </main>
111
+ <footer className="text-center py-8 text-gray-500">
112
+ <p>&copy; {new Date().getFullYear()} SSDI Case Prep Assistant. All Rights Reserved.</p>
113
+ </footer>
114
+ </div>
115
+ );
116
+ };
117
+
118
+ export default App;
README.md CHANGED
@@ -1,10 +1,20 @@
1
- ---
2
- title: Interactive
3
- emoji: ⚡
4
- colorFrom: red
5
- colorTo: indigo
6
- sdk: static
7
- pinned: false
8
- ---
9
-
10
- Check out the configuration reference at https://huggingface.co/docs/hub/spaces-config-reference
 
 
 
 
 
 
 
 
 
 
 
1
+ <div align="center">
2
+ <img width="1200" height="475" alt="GHBanner" src="https://github.com/user-attachments/assets/0aa67016-6eaf-458a-adb2-6e31a0763ed6" />
3
+ </div>
4
+
5
+ # Run and deploy your AI Studio app
6
+
7
+ This contains everything you need to run your app locally.
8
+
9
+ View your app in AI Studio: https://ai.studio/apps/drive/1RqZOrEPQPLYTN6qzHOb6ATOkpypvFChz
10
+
11
+ ## Run Locally
12
+
13
+ **Prerequisites:** Node.js
14
+
15
+
16
+ 1. Install dependencies:
17
+ `npm install`
18
+ 2. Set the `GEMINI_API_KEY` in [.env.local](.env.local) to your Gemini API key
19
+ 3. Run the app:
20
+ `npm run dev`
components/ActionPlan.tsx ADDED
@@ -0,0 +1,101 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+
2
+ import React, { useState, useMemo } from 'react';
3
+ import type { ActionPlan, PlanCategory } from '../types';
4
+ import { DocumentIcon } from './icons/DocumentIcon';
5
+ import { MedicalIcon } from './icons/MedicalIcon';
6
+ import { WorkIcon } from './icons/WorkIcon';
7
+ import { CheckIcon } from './icons/CheckIcon';
8
+
9
+ interface ActionPlanProps {
10
+ plan: ActionPlan;
11
+ onToggleItem: (categoryIndex: number, itemIndex: number) => void;
12
+ onReset: () => void;
13
+ }
14
+
15
+ const getCategoryIcon = (categoryName: string): React.ReactNode => {
16
+ const lowerCaseName = categoryName.toLowerCase();
17
+ if (lowerCaseName.includes('medical')) return <MedicalIcon className="w-6 h-6" />;
18
+ if (lowerCaseName.includes('work')) return <WorkIcon className="w-6 h-6" />;
19
+ return <DocumentIcon className="w-6 h-6" />;
20
+ };
21
+
22
+ const CategoryCard: React.FC<{ category: PlanCategory, categoryIndex: number, onToggleItem: (catIdx: number, itemIdx: number) => void }> = ({ category, categoryIndex, onToggleItem }) => {
23
+ const [isExpanded, setIsExpanded] = useState(true);
24
+
25
+ const completedItems = useMemo(() => category.items.filter(item => item.status === 'Completed').length, [category.items]);
26
+ const totalItems = category.items.length;
27
+ const progress = totalItems > 0 ? (completedItems / totalItems) * 100 : 0;
28
+
29
+ return (
30
+ <div className="bg-gray-900 border border-white/10 rounded-xl overflow-hidden">
31
+ <button
32
+ className="w-full flex justify-between items-center p-4 md:p-6 text-left hover:bg-gray-800 transition-colors"
33
+ onClick={() => setIsExpanded(!isExpanded)}
34
+ >
35
+ <div className="flex items-center space-x-4">
36
+ <span className="text-brand-secondary">{getCategoryIcon(category.category)}</span>
37
+ <div>
38
+ <h3 className="text-lg font-bold text-white">{category.category}</h3>
39
+ <p className="text-sm text-gray-400">{category.description}</p>
40
+ </div>
41
+ </div>
42
+ <div className="flex items-center space-x-4">
43
+ <span className="text-sm font-mono text-gray-400">{completedItems}/{totalItems}</span>
44
+ <svg className={`w-5 h-5 text-gray-400 transform transition-transform ${isExpanded ? 'rotate-180' : ''}`} fill="none" viewBox="0 0 24 24" stroke="currentColor">
45
+ <path strokeLinecap="round" strokeLinejoin="round" strokeWidth={2} d="M19 9l-7 7-7-7" />
46
+ </svg>
47
+ </div>
48
+ </button>
49
+
50
+ {isExpanded && (
51
+ <div className="px-4 md:px-6 pb-4">
52
+ <div className="w-full bg-gray-700 rounded-full h-1.5 mb-4">
53
+ <div className="bg-brand-secondary h-1.5 rounded-full" style={{ width: `${progress}%`, transition: 'width 0.5s ease-in-out' }}></div>
54
+ </div>
55
+ <ul className="space-y-3">
56
+ {category.items.map((item, itemIndex) => (
57
+ <li key={itemIndex} className="flex items-start space-x-3 p-3 rounded-lg bg-gray-800/50">
58
+ <button onClick={() => onToggleItem(categoryIndex, itemIndex)} className="flex-shrink-0 mt-1">
59
+ <div className={`w-6 h-6 rounded-md flex items-center justify-center border-2 transition-all ${item.status === 'Completed' ? 'bg-brand-secondary border-brand-secondary' : 'bg-gray-700 border-gray-600 hover:border-brand-secondary'}`}>
60
+ {item.status === 'Completed' && <CheckIcon />}
61
+ </div>
62
+ </button>
63
+ <div>
64
+ <p className={`font-semibold text-white ${item.status === 'Completed' ? 'line-through text-gray-500' : ''}`}>{item.item}</p>
65
+ <p className="text-sm text-gray-400">{item.description}</p>
66
+ </div>
67
+ </li>
68
+ ))}
69
+ </ul>
70
+ </div>
71
+ )}
72
+ </div>
73
+ );
74
+ };
75
+
76
+
77
+ export const ActionPlanComponent: React.FC<ActionPlanProps> = ({ plan, onToggleItem, onReset }) => {
78
+ return (
79
+ <div className="space-y-8 animate-fade-in">
80
+ <div className="text-center p-6 bg-gray-900 border border-white/10 rounded-xl">
81
+ <h2 className="text-3xl font-bold text-white">{plan.title}</h2>
82
+ <p className="mt-2 text-gray-300 max-w-3xl mx-auto">{plan.summary}</p>
83
+ </div>
84
+
85
+ <div className="space-y-4">
86
+ {plan.categories.map((category, index) => (
87
+ <CategoryCard key={index} category={category} categoryIndex={index} onToggleItem={onToggleItem} />
88
+ ))}
89
+ </div>
90
+
91
+ <div className="text-center pt-8">
92
+ <button
93
+ onClick={onReset}
94
+ className="inline-flex items-center px-8 py-3 border border-gray-600 text-base font-medium rounded-md text-gray-300 bg-gray-800 hover:bg-gray-700 focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-brand-primary focus:ring-offset-gray-950 transition-colors"
95
+ >
96
+ Start a New Plan
97
+ </button>
98
+ </div>
99
+ </div>
100
+ );
101
+ };
components/CaseIntakeForm.tsx ADDED
@@ -0,0 +1,165 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+
2
+ import React, { useState } from 'react';
3
+ import type { CaseData } from '../types';
4
+ import { StepIndicator } from './StepIndicator';
5
+
6
+ interface CaseIntakeFormProps {
7
+ onSubmit: (data: CaseData) => void;
8
+ }
9
+
10
+ const steps = ["About You", "Medical", "Work History", "Limitations"];
11
+
12
+ export const CaseIntakeForm: React.FC<CaseIntakeFormProps> = ({ onSubmit }) => {
13
+ const [currentStep, setCurrentStep] = useState(0);
14
+ const [formData, setFormData] = useState<CaseData>({
15
+ age: '',
16
+ medicalConditions: '',
17
+ workHistory: '',
18
+ limitations: '',
19
+ });
20
+
21
+ const handleChange = (e: React.ChangeEvent<HTMLInputElement | HTMLTextAreaElement>) => {
22
+ const { name, value } = e.target;
23
+ setFormData(prev => ({ ...prev, [name]: value }));
24
+ };
25
+
26
+ const nextStep = () => {
27
+ if (currentStep < steps.length - 1) {
28
+ setCurrentStep(currentStep + 1);
29
+ }
30
+ };
31
+
32
+ const prevStep = () => {
33
+ if (currentStep > 0) {
34
+ setCurrentStep(currentStep - 1);
35
+ }
36
+ };
37
+
38
+ const handleSubmit = (e: React.FormEvent) => {
39
+ e.preventDefault();
40
+ onSubmit(formData);
41
+ };
42
+
43
+ const isNextDisabled = () => {
44
+ switch(currentStep) {
45
+ case 0: return !formData.age;
46
+ case 1: return !formData.medicalConditions;
47
+ case 2: return !formData.workHistory;
48
+ case 3: return !formData.limitations;
49
+ default: return true;
50
+ }
51
+ };
52
+
53
+ return (
54
+ <div className="bg-gray-900/50 backdrop-blur-sm border border-white/10 rounded-2xl p-6 md:p-8 shadow-2xl">
55
+ <StepIndicator steps={steps} currentStep={currentStep} />
56
+ <form onSubmit={handleSubmit} className="mt-8 space-y-8">
57
+ {currentStep === 0 && (
58
+ <div className="animate-fade-in">
59
+ <h2 className="text-2xl font-bold text-white">About You</h2>
60
+ <p className="text-gray-400 mt-1">This information helps the AI tailor recommendations.</p>
61
+ <div className="mt-6">
62
+ <label htmlFor="age" className="block text-sm font-medium text-gray-300">Your Age</label>
63
+ <input
64
+ type="number"
65
+ name="age"
66
+ id="age"
67
+ value={formData.age}
68
+ onChange={handleChange}
69
+ placeholder="e.g., 54"
70
+ className="mt-2 block w-full bg-gray-800 border border-gray-700 rounded-md shadow-sm py-3 px-4 text-white focus:outline-none focus:ring-brand-secondary focus:border-brand-secondary sm:text-sm"
71
+ required
72
+ />
73
+ </div>
74
+ </div>
75
+ )}
76
+ {currentStep === 1 && (
77
+ <div className="animate-fade-in">
78
+ <h2 className="text-2xl font-bold text-white">Your Medical Conditions</h2>
79
+ <p className="text-gray-400 mt-1">List all diagnosed conditions that affect your ability to work.</p>
80
+ <div className="mt-6">
81
+ <label htmlFor="medicalConditions" className="block text-sm font-medium text-gray-300">Medical Conditions</label>
82
+ <textarea
83
+ name="medicalConditions"
84
+ id="medicalConditions"
85
+ value={formData.medicalConditions}
86
+ onChange={handleChange}
87
+ rows={5}
88
+ placeholder="e.g., Degenerative disc disease, severe anxiety, diabetic neuropathy"
89
+ className="mt-2 block w-full bg-gray-800 border border-gray-700 rounded-md shadow-sm py-3 px-4 text-white focus:outline-none focus:ring-brand-secondary focus:border-brand-secondary sm:text-sm"
90
+ required
91
+ />
92
+ </div>
93
+ </div>
94
+ )}
95
+ {currentStep === 2 && (
96
+ <div className="animate-fade-in">
97
+ <h2 className="text-2xl font-bold text-white">Work History</h2>
98
+ <p className="text-gray-400 mt-1">Briefly describe your jobs over the last 15 years.</p>
99
+ <div className="mt-6">
100
+ <label htmlFor="workHistory" className="block text-sm font-medium text-gray-300">Work History</label>
101
+ <textarea
102
+ name="workHistory"
103
+ id="workHistory"
104
+ value={formData.workHistory}
105
+ onChange={handleChange}
106
+ rows={5}
107
+ placeholder="e.g., Construction worker (10 years), Warehouse manager (5 years). Both jobs required heavy lifting and long periods of standing."
108
+ className="mt-2 block w-full bg-gray-800 border border-gray-700 rounded-md shadow-sm py-3 px-4 text-white focus:outline-none focus:ring-brand-secondary focus:border-brand-secondary sm:text-sm"
109
+ required
110
+ />
111
+ </div>
112
+ </div>
113
+ )}
114
+ {currentStep === 3 && (
115
+ <div className="animate-fade-in">
116
+ <h2 className="text-2xl font-bold text-white">Daily Limitations</h2>
117
+ <p className="text-gray-400 mt-1">Describe how your conditions limit your daily activities and ability to work.</p>
118
+ <div className="mt-6">
119
+ <label htmlFor="limitations" className="block text-sm font-medium text-gray-300">Daily Limitations</label>
120
+ <textarea
121
+ name="limitations"
122
+ id="limitations"
123
+ value={formData.limitations}
124
+ onChange={handleChange}
125
+ rows={5}
126
+ placeholder="e.g., Cannot sit for more than 20 minutes due to back pain. Trouble concentrating due to anxiety. Difficulty lifting anything over 10 pounds."
127
+ className="mt-2 block w-full bg-gray-800 border border-gray-700 rounded-md shadow-sm py-3 px-4 text-white focus:outline-none focus:ring-brand-secondary focus:border-brand-secondary sm:text-sm"
128
+ required
129
+ />
130
+ </div>
131
+ </div>
132
+ )}
133
+
134
+ <div className="flex justify-between pt-6 border-t border-white/10">
135
+ <button
136
+ type="button"
137
+ onClick={prevStep}
138
+ className={`inline-flex items-center px-6 py-3 border border-gray-600 text-sm font-medium rounded-md text-gray-300 bg-gray-800 hover:bg-gray-700 focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-brand-primary focus:ring-offset-gray-900 transition-colors ${currentStep === 0 ? 'opacity-50 cursor-not-allowed' : ''}`}
139
+ disabled={currentStep === 0}
140
+ >
141
+ Back
142
+ </button>
143
+ {currentStep < steps.length - 1 ? (
144
+ <button
145
+ type="button"
146
+ onClick={nextStep}
147
+ className={`inline-flex items-center px-6 py-3 border border-transparent text-sm font-medium rounded-md shadow-sm text-white bg-brand-primary hover:bg-opacity-90 focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-brand-primary focus:ring-offset-gray-900 transition-colors ${isNextDisabled() ? 'opacity-50 cursor-not-allowed' : ''}`}
148
+ disabled={isNextDisabled()}
149
+ >
150
+ Next
151
+ </button>
152
+ ) : (
153
+ <button
154
+ type="submit"
155
+ className={`inline-flex items-center px-6 py-3 border border-transparent text-sm font-medium rounded-md shadow-sm text-white bg-brand-secondary hover:bg-opacity-90 focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-brand-secondary focus:ring-offset-gray-900 transition-colors ${isNextDisabled() ? 'opacity-50 cursor-not-allowed' : ''}`}
156
+ disabled={isNextDisabled()}
157
+ >
158
+ Generate Plan
159
+ </button>
160
+ )}
161
+ </div>
162
+ </form>
163
+ </div>
164
+ );
165
+ };
components/StepIndicator.tsx ADDED
@@ -0,0 +1,51 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+
2
+ import React from 'react';
3
+ import { CheckIcon } from './icons/CheckIcon';
4
+
5
+ interface StepIndicatorProps {
6
+ steps: string[];
7
+ currentStep: number;
8
+ }
9
+
10
+ export const StepIndicator: React.FC<StepIndicatorProps> = ({ steps, currentStep }) => {
11
+ return (
12
+ <nav aria-label="Progress">
13
+ <ol role="list" className="flex items-center">
14
+ {steps.map((step, stepIdx) => (
15
+ <li key={step} className={`relative ${stepIdx !== steps.length - 1 ? 'pr-8 sm:pr-20' : ''}`}>
16
+ {stepIdx < currentStep ? (
17
+ <>
18
+ <div className="absolute inset-0 flex items-center" aria-hidden="true">
19
+ <div className="h-0.5 w-full bg-brand-secondary" />
20
+ </div>
21
+ <div className="relative flex h-8 w-8 items-center justify-center rounded-full bg-brand-secondary">
22
+ <CheckIcon className="h-5 w-5 text-white" />
23
+ </div>
24
+ <span className="absolute top-10 -left-2 w-max text-xs text-gray-300">{step}</span>
25
+ </>
26
+ ) : stepIdx === currentStep ? (
27
+ <>
28
+ <div className="absolute inset-0 flex items-center" aria-hidden="true">
29
+ <div className="h-0.5 w-full bg-gray-700" />
30
+ </div>
31
+ <div className="relative flex h-8 w-8 items-center justify-center rounded-full border-2 border-brand-secondary bg-gray-800">
32
+ <span className="h-2.5 w-2.5 rounded-full bg-brand-secondary" />
33
+ </div>
34
+ <span className="absolute top-10 -left-2 w-max text-xs text-brand-secondary font-semibold">{step}</span>
35
+ </>
36
+ ) : (
37
+ <>
38
+ <div className="absolute inset-0 flex items-center" aria-hidden="true">
39
+ <div className="h-0.5 w-full bg-gray-700" />
40
+ </div>
41
+ <div className="relative flex h-8 w-8 items-center justify-center rounded-full border-2 border-gray-600 bg-gray-800">
42
+ </div>
43
+ <span className="absolute top-10 -left-2 w-max text-xs text-gray-500">{step}</span>
44
+ </>
45
+ )}
46
+ </li>
47
+ ))}
48
+ </ol>
49
+ </nav>
50
+ );
51
+ };
components/icons/CheckIcon.tsx ADDED
@@ -0,0 +1,8 @@
 
 
 
 
 
 
 
 
 
1
+
2
+ import React from 'react';
3
+
4
+ export const CheckIcon: React.FC<React.SVGProps<SVGSVGElement>> = (props) => (
5
+ <svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" strokeWidth={3} stroke="currentColor" className="w-4 h-4 text-white" {...props}>
6
+ <path strokeLinecap="round" strokeLinejoin="round" d="M4.5 12.75l6 6 9-13.5" />
7
+ </svg>
8
+ );
components/icons/DocumentIcon.tsx ADDED
@@ -0,0 +1,8 @@
 
 
 
 
 
 
 
 
 
1
+
2
+ import React from 'react';
3
+
4
+ export const DocumentIcon: React.FC<React.SVGProps<SVGSVGElement>> = (props) => (
5
+ <svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" strokeWidth={1.5} stroke="currentColor" {...props}>
6
+ <path strokeLinecap="round" strokeLinejoin="round" d="M19.5 14.25v-2.625a3.375 3.375 0 00-3.375-3.375h-1.5A1.125 1.125 0 0113.5 7.125v-1.5a3.375 3.375 0 00-3.375-3.375H8.25m2.25 0H5.625c-.621 0-1.125.504-1.125 1.125v17.25c0 .621.504 1.125 1.125 1.125h12.75c.621 0 1.125-.504 1.125-1.125V11.25a9 9 0 00-9-9z" />
7
+ </svg>
8
+ );
components/icons/MedicalIcon.tsx ADDED
@@ -0,0 +1,9 @@
 
 
 
 
 
 
 
 
 
 
1
+
2
+ import React from 'react';
3
+
4
+ export const MedicalIcon: React.FC<React.SVGProps<SVGSVGElement>> = (props) => (
5
+ <svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" strokeWidth={1.5} stroke="currentColor" {...props}>
6
+ <path strokeLinecap="round" strokeLinejoin="round" d="M21 8.25c0-2.485-2.099-4.5-4.688-4.5-1.935 0-3.597 1.126-4.312 2.733-.715-1.607-2.377-2.733-4.313-2.733C5.1 3.75 3 5.765 3 8.25c0 7.22 9 12 9 12s9-4.78 9-12z" />
7
+ <path strokeLinecap="round" strokeLinejoin="round" d="M12 7.5h.008v.008H12V7.5z" />
8
+ </svg>
9
+ );
components/icons/Spinner.tsx ADDED
@@ -0,0 +1,9 @@
 
 
 
 
 
 
 
 
 
 
1
+
2
+ import React from 'react';
3
+
4
+ export const Spinner: React.FC = () => (
5
+ <svg className="animate-spin h-10 w-10 text-brand-secondary" xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24">
6
+ <circle className="opacity-25" cx="12" cy="12" r="10" stroke="currentColor" strokeWidth="4"></circle>
7
+ <path className="opacity-75" fill="currentColor" d="M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4zm2 5.291A7.962 7.962 0 014 12H0c0 3.042 1.135 5.824 3 7.938l3-2.647z"></path>
8
+ </svg>
9
+ );
components/icons/WorkIcon.tsx ADDED
@@ -0,0 +1,8 @@
 
 
 
 
 
 
 
 
 
1
+
2
+ import React from 'react';
3
+
4
+ export const WorkIcon: React.FC<React.SVGProps<SVGSVGElement>> = (props) => (
5
+ <svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" strokeWidth={1.5} stroke="currentColor" {...props}>
6
+ <path strokeLinecap="round" strokeLinejoin="round" d="M20.25 14.15v4.075c0 1.313-.964 2.45-2.25 2.654-.513.076-1.036.146-1.57.196-1.037.05-2.092.08-3.15.08-1.058 0-2.113-.03-3.15-.08-.534-.05-1.057-.12-1.57-.196-1.286-.204-2.25-1.341-2.25-2.654V14.15M15.75 7.5l-3.75 3.75-3.75-3.75M15.75 7.5V4.5c0-1.5-1.5-3-3.75-3S8.25 3 8.25 4.5v3" />
7
+ </svg>
8
+ );
index.html CHANGED
@@ -1,1211 +1,58 @@
 
1
  <!DOCTYPE html>
2
- <html lang="en">
3
  <head>
4
- <meta charset="UTF-8">
5
- <meta name="viewport" content="width=device-width, initial-scale=1.0">
6
- <title>SSDI Document Strengthening Portal | Caustino Legal Services</title>
7
  <script src="https://cdn.tailwindcss.com"></script>
8
- <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.0/css/all.min.css">
9
- <style>
10
- .document-section {
11
- transition: all 0.3s ease;
12
- }
13
- .document-section:hover {
14
- transform: translateY(-3px);
15
- box-shadow: 0 10px 20px rgba(0,0,0,0.1);
16
- }
17
- .tab-content {
18
- display: none;
19
- }
20
- .tab-content.active {
21
- display: block;
22
- animation: fadeIn 0.5s ease;
23
- }
24
- @keyframes fadeIn {
25
- from { opacity: 0; transform: translateY(10px); }
26
- to { opacity: 1; transform: translateY(0); }
27
- }
28
- .exhibit-table tr:nth-child(even) {
29
- background-color: #f8fafc;
30
- }
31
- .progress-bar {
32
- transition: width 0.5s ease;
33
- }
34
- .tooltip {
35
- visibility: hidden;
36
- opacity: 0;
37
- transition: opacity 0.3s;
38
- }
39
- .has-tooltip:hover .tooltip {
40
- visibility: visible;
41
- opacity: 1;
42
- }
43
- </style>
44
- </head>
45
- <body class="bg-gray-50 font-sans antialiased">
46
- <header class="bg-blue-800 text-white shadow-lg">
47
- <div class="container mx-auto px-4 py-6">
48
- <div class="flex justify-between items-center">
49
- <div class="flex items-center space-x-4">
50
- <i class="fas fa-balance-scale fa-2x text-blue-300"></i>
51
- <div>
52
- <h1 class="text-2xl font-bold">SSDI Document Strengthening Portal</h1>
53
- <p class="text-blue-200">Caustino Legal Services</p>
54
- </div>
55
- </div>
56
- <div class="hidden md:block">
57
- <nav class="flex space-x-6">
58
- <a href="#" class="hover:text-blue-300 font-medium">Dashboard</a>
59
- <a href="#" class="hover:text-blue-300 font-medium">Resources</a>
60
- <a href="#" class="hover:text-blue-300 font-medium">Contact</a>
61
- <a href="#" class="bg-blue-600 hover:bg-blue-700 px-4 py-2 rounded-lg font-medium">My Account</a>
62
- </nav>
63
- </div>
64
- <button class="md:hidden text-2xl">
65
- <i class="fas fa-bars"></i>
66
- </button>
67
- </div>
68
- </div>
69
- </header>
70
-
71
- <main class="container mx-auto px-4 py-8">
72
- <div class="bg-white rounded-xl shadow-md overflow-hidden mb-8">
73
- <div class="p-6">
74
- <h2 class="text-2xl font-bold text-gray-800 mb-2">Document Strengthening and Exhibit Completion Plan</h2>
75
- <p class="text-gray-600 mb-6">You're carrying a lot with this filing. Let's make every page work for you and lock down the record so the court can't look away.</p>
76
-
77
- <div class="flex flex-wrap gap-4 mb-6">
78
- <div class="flex items-center bg-blue-100 text-blue-800 px-4 py-2 rounded-full">
79
- <i class="fas fa-file-alt mr-2"></i>
80
- <span>Case: McLaughlin v. SSA</span>
81
- </div>
82
- <div class="flex items-center bg-green-100 text-green-800 px-4 py-2 rounded-full">
83
- <i class="fas fa-clock mr-2"></i>
84
- <span>Deadline: June 15, 2024</span>
85
- </div>
86
- <div class="flex items-center bg-purple-100 text-purple-800 px-4 py-2 rounded-full">
87
- <i class="fas fa-gavel mr-2"></i>
88
- <span>Court: U.S. Court of Federal Claims</span>
89
- </div>
90
- </div>
91
-
92
- <div class="w-full bg-gray-200 rounded-full h-4 mb-6">
93
- <div class="progress-bar bg-blue-600 h-4 rounded-full" style="width: 65%"></div>
94
- </div>
95
-
96
- <div class="flex mb-6 overflow-x-auto">
97
- <button class="tab-btn active px-6 py-3 font-medium border-b-2 border-blue-600 text-blue-600" data-tab="requirements">Requirements</button>
98
- <button class="tab-btn px-6 py-3 font-medium text-gray-500 hover:text-blue-600" data-tab="recommendations">Recommendations</button>
99
- <button class="tab-btn px-6 py-3 font-medium text-gray-500 hover:text-blue-600" data-tab="exhibits">Exhibits</button>
100
- <button class="tab-btn px-6 py-3 font-medium text-gray-500 hover:text-blue-600" data-tab="templates">Templates</button>
101
- <button class="tab-btn px-6 py-3 font-medium text-gray-500 hover:text-blue-600" data-tab="checklist">Checklist</button>
102
- </div>
103
- </div>
104
-
105
- <div class="tab-content active" id="requirements">
106
- <div class="p-6 border-t border-gray-200">
107
- <h3 class="text-xl font-semibold text-gray-800 mb-4">What I need from you to proceed</h3>
108
-
109
- <div class="grid md:grid-cols-2 gap-6">
110
- <div class="document-section bg-white p-6 rounded-lg border border-gray-200 hover:border-blue-300">
111
- <div class="flex items-start mb-4">
112
- <div class="bg-blue-100 p-3 rounded-full mr-4">
113
- <i class="fas fa-file-text text-blue-600"></i>
114
- </div>
115
- <div>
116
- <h4 class="font-bold text-gray-800">Document text</h4>
117
- <p class="text-gray-600 text-sm">The full brief/motion (paste the text or share in smaller sections).</p>
118
- </div>
119
- </div>
120
- <div class="bg-gray-50 p-4 rounded-lg">
121
- <textarea class="w-full h-32 p-3 border border-gray-300 rounded-lg focus:ring-2 focus:ring-blue-500 focus:border-blue-500" placeholder="Paste your document text here..."></textarea>
122
- <button class="mt-2 bg-blue-600 hover:bg-blue-700 text-white px-4 py-2 rounded-lg text-sm font-medium">Upload File</button>
123
- </div>
124
- </div>
125
-
126
- <div class="document-section bg-white p-6 rounded-lg border border-gray-200 hover:border-blue-300">
127
- <div class="flex items-start mb-4">
128
- <div class="bg-blue-100 p-3 rounded-full mr-4">
129
- <i class="fas fa-gavel text-blue-600"></i>
130
- </div>
131
- <div>
132
- <h4 class="font-bold text-gray-800">Court and posture</h4>
133
- <p class="text-gray-600 text-sm">Which court(s), division, and posture (e.g., complaint, consolidated amended complaint, PI/summary judgment, appellate brief).</p>
134
- </div>
135
- </div>
136
- <div class="space-y-3">
137
- <div>
138
- <label class="block text-sm font-medium text-gray-700 mb-1">Court</label>
139
- <input type="text" class="w-full p-2 border border-gray-300 rounded-lg" value="U.S. Court of Federal Claims" readonly>
140
- </div>
141
- <div>
142
- <label class="block text-sm font-medium text-gray-700 mb-1">Posture</label>
143
- <input type="text" class="w-full p-2 border border-gray-300 rounded-lg" value="Consolidated Petition for Systemic, Monetary, and Declaratory Relief" readonly>
144
- </div>
145
- </div>
146
- </div>
147
-
148
- <div class="document-section bg-white p-6 rounded-lg border border-gray-200 hover:border-blue-300">
149
- <div class="flex items-start mb-4">
150
- <div class="bg-blue-100 p-3 rounded-full mr-4">
151
- <i class="fas fa-clock text-blue-600"></i>
152
- </div>
153
- <div>
154
- <h4 class="font-bold text-gray-800">Deadlines and limits</h4>
155
- <p class="text-gray-600 text-sm">Filing deadline, page/word limits, font/format rules, and any local rule quirks.</p>
156
- </div>
157
- </div>
158
- <div class="space-y-3">
159
- <div>
160
- <label class="block text-sm font-medium text-gray-700 mb-1">Deadline</label>
161
- <input type="text" class="w-full p-2 border border-gray-300 rounded-lg" value="June 15, 2024" readonly>
162
- </div>
163
- <div>
164
- <label class="block text-sm font-medium text-gray-700 mb-1">Page Limit</label>
165
- <input type="text" class="w-full p-2 border border-gray-300 rounded-lg" value="50 pages" readonly>
166
- </div>
167
- </div>
168
- </div>
169
-
170
- <div class="document-section bg-white p-6 rounded-lg border border-gray-200 hover:border-blue-300">
171
- <div class="flex items-start mb-4">
172
- <div class="bg-blue-100 p-3 rounded-full mr-4">
173
- <i class="fas fa-bullseye text-blue-600"></i>
174
- </div>
175
- <div>
176
- <h4 class="font-bold text-gray-800">Target relief</h4>
177
- <p class="text-gray-600 text-sm">Exact remedies sought (e.g., injunctive relief, structural relief, appointment of monitor, remand with instructions, vacatur).</p>
178
- </div>
179
- </div>
180
- <div class="space-y-2">
181
- <div class="flex items-center">
182
- <i class="fas fa-check-circle text-green-500 mr-2"></i>
183
- <span>Structural Injunction</span>
184
- </div>
185
- <div class="flex items-center">
186
- <i class="fas fa-check-circle text-green-500 mr-2"></i>
187
- <span>Monetary Relief ($43,200)</span>
188
- </div>
189
- <div class="flex items-center">
190
- <i class="fas fa-check-circle text-green-500 mr-2"></i>
191
- <span>Declaratory Relief</span>
192
- </div>
193
- <div class="flex items-center">
194
- <i class="fas fa-check-circle text-green-500 mr-2"></i>
195
- <span>Legislative Mandate</span>
196
- </div>
197
- </div>
198
- </div>
199
-
200
- <div class="document-section bg-white p-6 rounded-lg border border-gray-200 hover:border-blue-300">
201
- <div class="flex items-start mb-4">
202
- <div class="bg-blue-100 p-3 rounded-full mr-4">
203
- <i class="fas fa-folder-open text-blue-600"></i>
204
- </div>
205
- <div>
206
- <h4 class="font-bold text-gray-800">Exhibit list</h4>
207
- <p class="text-gray-600 text-sm">A rough list of exhibits you intend to include, even if incomplete.</p>
208
- </div>
209
- </div>
210
- <div class="space-y-2">
211
- <div class="flex items-center">
212
- <i class="fas fa-file-pdf text-red-500 mr-2"></i>
213
- <span>Appendix A: fMRI Evidence</span>
214
- </div>
215
- <div class="flex items-center">
216
- <i class="fas fa-file-pdf text-red-500 mr-2"></i>
217
- <span>Appendix B: Bibliography</span>
218
- </div>
219
- <div class="flex items-center">
220
- <i class="fas fa-file-pdf text-red-500 mr-2"></i>
221
- <span>Appendix C: SNP Data</span>
222
- </div>
223
- <div class="flex items-center">
224
- <i class="fas fa-file-pdf text-red-500 mr-2"></i>
225
- <span>Appendix D: Neurogenetic Crosswalk</span>
226
- </div>
227
- <div class="flex items-center">
228
- <i class="fas fa-file-pdf text-red-500 mr-2"></i>
229
- <span>Appendix E: Case Dockets</span>
230
- </div>
231
- <button class="mt-3 text-blue-600 hover:text-blue-800 text-sm font-medium flex items-center">
232
- <i class="fas fa-plus-circle mr-1"></i> Add Exhibit
233
- </button>
234
- </div>
235
- </div>
236
-
237
- <div class="document-section bg-white p-6 rounded-lg border border-gray-200 hover:border-blue-300">
238
- <div class="flex items-start mb-4">
239
- <div class="bg-blue-100 p-3 rounded-full mr-4">
240
- <i class="fas fa-archive text-blue-600"></i>
241
- </div>
242
- <div>
243
- <h4 class="font-bold text-gray-800">Record status</h4>
244
- <p class="text-gray-600 text-sm">Whether there's an administrative record, its pagination, and what's properly before the court.</p>
245
- </div>
246
- </div>
247
- <div class="space-y-2">
248
- <div class="flex items-center">
249
- <i class="fas fa-check-circle text-green-500 mr-2"></i>
250
- <span>Administrative Record exists</span>
251
- </div>
252
- <div>
253
- <label class="block text-sm font-medium text-gray-700 mb-1">Pagination</label>
254
- <input type="text" class="w-full p-2 border border-gray-300 rounded-lg" placeholder="Enter pagination details">
255
- </div>
256
- </div>
257
- </div>
258
-
259
- <div class="document-section bg-white p-6 rounded-lg border border-gray-200 hover:border-blue-300">
260
- <div class="flex items-start mb-4">
261
- <div class="bg-blue-100 p-3 rounded-full mr-4">
262
- <i class="fas fa-lock text-blue-600"></i>
263
- </div>
264
- <div>
265
- <h4 class="font-bold text-gray-800">Confidentiality</h4>
266
- <p class="text-gray-600 text-sm">Materials needing redaction/seal (PHI, PII, proprietary content).</p>
267
- </div>
268
- </div>
269
- <div class="space-y-3">
270
- <div class="flex items-center">
271
- <input type="checkbox" id="phi" class="mr-2">
272
- <label for="phi">Protected Health Information (PHI)</label>
273
- </div>
274
- <div class="flex items-center">
275
- <input type="checkbox" id="pii" class="mr-2" checked>
276
- <label for="pii">Personally Identifiable Information (PII)</label>
277
- </div>
278
- <div class="flex items-center">
279
- <input type="checkbox" id="proprietary" class="mr-2">
280
- <label for="proprietary">Proprietary Content</label>
281
- </div>
282
- </div>
283
- </div>
284
-
285
- <div class="document-section bg-white p-6 rounded-lg border border-gray-200 hover:border-blue-300">
286
- <div class="flex items-start mb-4">
287
- <div class="bg-blue-100 p-3 rounded-full mr-4">
288
- <i class="fas fa-shield-alt text-blue-600"></i>
289
- </div>
290
- <div>
291
- <h4 class="font-bold text-gray-800">Opposition posture</h4>
292
- <p class="text-gray-600 text-sm">Any anticipated defenses or jurisdictional/standing challenges you want to neutralize up front.</p>
293
- </div>
294
- </div>
295
- <div class="space-y-2">
296
- <div class="flex items-center">
297
- <i class="fas fa-check-circle text-green-500 mr-2"></i>
298
- <span>Jurisdictional challenges</span>
299
- </div>
300
- <div class="flex items-center">
301
- <i class="fas fa-check-circle text-green-500 mr-2"></i>
302
- <span>Standing challenges</span>
303
- </div>
304
- <div class="flex items-center">
305
- <i class="fas fa-check-circle text-green-500 mr-2"></i>
306
- <span>Scientific evidence validity</span>
307
- </div>
308
- <textarea class="w-full mt-2 p-2 border border-gray-300 rounded-lg h-20" placeholder="Add additional anticipated defenses..."></textarea>
309
- </div>
310
- </div>
311
- </div>
312
-
313
- <div class="mt-8 flex justify-end">
314
- <button class="bg-blue-600 hover:bg-blue-700 text-white px-6 py-3 rounded-lg font-medium flex items-center">
315
- <i class="fas fa-save mr-2"></i> Save All Requirements
316
- </button>
317
- </div>
318
- </div>
319
- </div>
320
-
321
- <div class="tab-content" id="recommendations">
322
- <div class="p-6 border-t border-gray-200">
323
- <h3 class="text-xl font-semibold text-gray-800 mb-4">Strengthening Recommendations</h3>
324
-
325
- <div class="space-y-6">
326
- <div class="bg-white p-6 rounded-lg border border-gray-200">
327
- <h4 class="font-bold text-lg text-gray-800 mb-3 flex items-center">
328
- <i class="fas fa-sitemap text-blue-500 mr-2"></i> Argument Structure and Clarity
329
- </h4>
330
- <ul class="space-y-3 pl-5">
331
- <li class="flex items-start">
332
- <i class="fas fa-check-circle text-green-500 mt-1 mr-2"></i>
333
- <div>
334
- <span class="font-medium">Lead with the thesis:</span> One crisp paragraph stating what the court should do and why it has the power to do it.
335
- </div>
336
- </li>
337
- <li class="flex items-start">
338
- <i class="fas fa-check-circle text-green-500 mt-1 mr-2"></i>
339
- <div>
340
- <span class="font-medium">Standards of review:</span> Frame each issue under its standard (de novo, arbitrary/capricious, Chevron/Skidmore, harmless error) and argue to that lens.
341
- </div>
342
- </li>
343
- <li class="flex items-start">
344
- <i class="fas fa-check-circle text-green-500 mt-1 mr-2"></i>
345
- <div>
346
- <span class="font-medium">Issue architecture:</span> Questions Presented → Summary of Argument → Jurisdiction/Standing → Standard of Review → Merits → Remedy/Scope.
347
- </div>
348
- </li>
349
- <li class="flex items-start">
350
- <i class="fas fa-check-circle text-green-500 mt-1 mr-2"></i>
351
- <div>
352
- <span class="font-medium">Pinpoint citations:</span> Tight pincites to both authority and the record; eliminate string cites unless each adds a distinct proposition.
353
- </div>
354
- </li>
355
- </ul>
356
- </div>
357
-
358
- <div class="bg-white p-6 rounded-lg border border-gray-200">
359
- <h4 class="font-bold text-lg text-gray-800 mb-3 flex items-center">
360
- <i class="fas fa-landmark text-blue-500 mr-2"></i> Jurisdiction, Standing, and Channeling
361
- </h4>
362
- <ul class="space-y-3 pl-5">
363
- <li class="flex items-start">
364
- <i class="fas fa-check-circle text-green-500 mt-1 mr-2"></i>
365
- <div>
366
- <span class="font-medium">Jurisdictional hooks:</span> Cleanly state subject-matter jurisdiction, waiver of sovereign immunity, and any channeling/exhaustion exceptions.
367
- </div>
368
- </li>
369
- <li class="flex items-start">
370
- <i class="fas fa-check-circle text-green-500 mt-1 mr-2"></i>
371
- <div>
372
- <span class="font-medium">Injury and traceability:</span> Concrete harms, not abstractions; where systemic, tie individual harm to systemic defect.
373
- </div>
374
- </li>
375
- <li class="flex items-start">
376
- <i class="fas fa-check-circle text-green-500 mt-1 mr-2"></i>
377
- <div>
378
- <span class="font-medium">Relief tailoring:</span> Nexus between harm and remedy; show relief is no broader than necessary.
379
- </div>
380
- </li>
381
- </ul>
382
- </div>
383
-
384
- <div class="bg-white p-6 rounded-lg border border-gray-200">
385
- <h4 class="font-bold text-lg text-gray-800 mb-3 flex items-center">
386
- <i class="fas fa-file-alt text-blue-500 mr-2"></i> Record and Factual Showing
387
- </h4>
388
- <ul class="space-y-3 pl-5">
389
- <li class="flex items-start">
390
- <i class="fas fa-check-circle text-green-500 mt-1 mr-2"></i>
391
- <div>
392
- <span class="font-medium">Undisputed facts:</span> A short statement of material facts with precise record cites.
393
- </div>
394
- </li>
395
- <li class="flex items-start">
396
- <i class="fas fa-check-circle text-green-500 mt-1 mr-2"></i>
397
- <div>
398
- <span class="font-medium">Systemic proof:</span> Pair individual narratives with aggregate evidence (audits, OIG/Government reports, agency dashboards) to show pattern and practice.
399
- </div>
400
- </li>
401
- <li class="flex items-start">
402
- <i class="fas fa-check-circle text-green-500 mt-1 mr-2"></i>
403
- <div>
404
- <span class="font-medium">Procedural regularity:</span> Identify where the agency deviated from its own rules and why that matters under the APA and due process.
405
- </div>
406
- </li>
407
- </ul>
408
- </div>
409
-
410
- <div class="bg-white p-6 rounded-lg border border-gray-200">
411
- <h4 class="font-bold text-lg text-gray-800 mb-3 flex items-center">
412
- <i class="fas fa-flask text-blue-500 mr-2"></i> Science and Accessibility Integration
413
- </h4>
414
- <ul class="space-y-3 pl-5">
415
- <li class="flex items-start">
416
- <i class="fas fa-check-circle text-green-500 mt-1 mr-2"></i>
417
- <div>
418
- <span class="font-medium">Methodological reliability:</span> For scientific exhibits, include method, limitations, and clinical relevance in plain English to pass judicial common sense.
419
- </div>
420
- </li>
421
- <li class="flex items-start">
422
- <i class="fas fa-check-circle text-green-500 mt-1 mr-2"></i>
423
- <div>
424
- <span class="font-medium">Accessibility standards:</span> Where relevant, anchor to WCAG conformance levels, testing results, and user-impact affidavits to translate standards into harms.
425
- </div>
426
- </li>
427
- <li class="flex items-start">
428
- <i class="fas fa-check-circle text-green-500 mt-1 mr-2"></i>
429
- <div>
430
- <span class="font-medium">Neurogenetic evidence:</span> Tie diagnostic criteria and functional limitations directly to regulatory factors the adjudicator must consider.
431
- </div>
432
- </li>
433
- </ul>
434
- </div>
435
-
436
- <div class="bg-white p-6 rounded-lg border border-gray-200">
437
- <h4 class="font-bold text-lg text-gray-800 mb-3 flex items-center">
438
- <i class="fas fa-gavel text-blue-500 mr-2"></i> Remedies and Implementation
439
- </h4>
440
- <ul class="space-y-3 pl-5">
441
- <li class="flex items-start">
442
- <i class="fas fa-check-circle text-green-500 mt-1 mr-2"></i>
443
- <div>
444
- <span class="font-medium">Operable remedy plan:</span> Offer the court a workable injunction with timelines, milestones, data reporting, and a compliance mechanism (monitor/special master if warranted).
445
- </div>
446
- </li>
447
- <li class="flex items-start">
448
- <i class="fas fa-check-circle text-green-500 mt-1 mr-2"></i>
449
- <div>
450
- <span class="font-medium">Feasibility and costs:</span> Briefly address feasibility and burden to preempt overbreadth/undue-burden arguments.
451
- </div>
452
- </li>
453
- <li class="flex items-start">
454
- <i class="fas fa-check-circle text-green-500 mt-1 mr-2"></i>
455
- <div>
456
- <span class="font-medium">Fee posture:</span> Preserve EAJA and costs; if seeking structural relief, clarify enforcement and oversight within the court's equitable powers.
457
- </div>
458
- </li>
459
- </ul>
460
- </div>
461
- </div>
462
-
463
- <div class="mt-8 bg-blue-50 p-6 rounded-lg border border-blue-200">
464
- <h4 class="font-bold text-lg text-blue-800 mb-3 flex items-center">
465
- <i class="fas fa-lightbulb text-blue-500 mr-2"></i> Specific Recommendations for Your Case
466
- </h4>
467
- <div class="space-y-4">
468
- <div>
469
- <p class="font-medium text-gray-800">1. Neurogenetic Evidence Integration:</p>
470
- <p class="text-gray-700">Your Appendix D provides excellent cross-referencing of SNPs to SSA listings. We recommend expanding this with:</p>
471
- <ul class="list-disc pl-5 mt-2 space-y-1 text-gray-700">
472
- <li>Brief explanations of each SNP's functional impact in lay terms</li>
473
- <li>Citations to peer-reviewed studies supporting these associations</li>
474
- <li>Comparison to current SSA evidentiary standards showing the gap</li>
475
- </ul>
476
- </div>
477
- <div>
478
- <p class="font-medium text-gray-800">2. Structural Injunction Specificity:</p>
479
- <p class="text-gray-700">The proposed legislative text is strong. Add:</p>
480
- <ul class="list-disc pl-5 mt-2 space-y-1 text-gray-700">
481
- <li>Implementation timeline with milestones</li>
482
- <li>Cost estimates for agency compliance</li>
483
- <li>Oversight mechanism details</li>
484
- </ul>
485
- </div>
486
- <div>
487
- <p class="font-medium text-gray-800">3. Tucker Act Claim Enhancement:</p>
488
- <p class="text-gray-700">Strengthen the monetary relief argument by:</p>
489
- <ul class="list-disc pl-5 mt-2 space-y-1 text-gray-700">
490
- <li>Including SSA payment calculation worksheets</li>
491
- <li>Documenting all application and appeal dates</li>
492
- <li>Showing direct causation between SSA errors and withheld benefits</li>
493
- </ul>
494
- </div>
495
- </div>
496
- </div>
497
- </div>
498
- </div>
499
-
500
- <div class="tab-content" id="exhibits">
501
- <div class="p-6 border-t border-gray-200">
502
- <h3 class="text-xl font-semibold text-gray-800 mb-4">Exhibit Plan and Documentation</h3>
503
-
504
- <div class="mb-8">
505
- <h4 class="font-bold text-lg text-gray-800 mb-3">Exhibit Categories and Foundation</h4>
506
-
507
- <div class="grid md:grid-cols-2 gap-6">
508
- <div class="bg-white p-5 rounded-lg border border-gray-200">
509
- <div class="flex items-center mb-3">
510
- <div class="bg-blue-100 p-2 rounded-full mr-3">
511
- <i class="fas fa-file-archive text-blue-600"></i>
512
- </div>
513
- <h5 class="font-bold text-gray-800">Administrative Record Excerpts</h5>
514
- </div>
515
- <ul class="space-y-2 text-sm text-gray-700 pl-2">
516
- <li class="flex items-start">
517
- <i class="fas fa-check text-green-500 mt-1 mr-2 text-xs"></i>
518
- <span>Cite to official pagination; include cover page identifying AR range.</span>
519
- </li>
520
- <li class="flex items-start">
521
- <i class="fas fa-check text-green-500 mt-1 mr-2 text-xs"></i>
522
- <span>Avoid duplicating AR materials unless necessary for readability; use record pincites.</span>
523
- </li>
524
- </ul>
525
- </div>
526
-
527
- <div class="bg-white p-5 rounded-lg border border-gray-200">
528
- <div class="flex items-center mb-3">
529
- <div class="bg-blue-100 p-2 rounded-full mr-3">
530
- <i class="fas fa-user-tie text-blue-600"></i>
531
- </div>
532
- <h5 class="font-bold text-gray-800">Declarations/Affidavits</h5>
533
- </div>
534
- <ul class="space-y-2 text-sm text-gray-700 pl-2">
535
- <li class="flex items-start">
536
- <i class="fas fa-check text-green-500 mt-1 mr-2 text-xs"></i>
537
- <span>28 U.S.C. § 1746 unsworn declaration language.</span>
538
- </li>
539
- <li class="flex items-start">
540
- <i class="fas fa-check text-green-500 mt-1 mr-2 text-xs"></i>
541
- <span>Include exhibit-specific authentication within declarations.</span>
542
- </li>
543
- </ul>
544
- </div>
545
-
546
- <div class="bg-white p-5 rounded-lg border border-gray-200">
547
- <div class="flex items-center mb-3">
548
- <div class="bg-blue-100 p-2 rounded-full mr-3">
549
- <i class="fas fa-building text-blue-600"></i>
550
- </div>
551
- <h5 class="font-bold text-gray-800">Official Agency Materials</h5>
552
- </div>
553
- <ul class="space-y-2 text-sm text-gray-700 pl-2">
554
- <li class="flex items-start">
555
- <i class="fas fa-check text-green-500 mt-1 mr-2 text-xs"></i>
556
- <span>Include date/version and URL or identifier.</span>
557
- </li>
558
- <li class="flex items-start">
559
- <i class="fas fa-check text-green-500 mt-1 mr-2 text-xs"></i>
560
- <span>Request judicial notice where appropriate.</span>
561
- </li>
562
- </ul>
563
- </div>
564
-
565
- <div class="bg-white p-5 rounded-lg border border-gray-200">
566
- <div class="flex items-center mb-3">
567
- <div class="bg-blue-100 p-2 rounded-full mr-3">
568
- <i class="fas fa-microscope text-blue-600"></i>
569
- </div>
570
- <h5 class="font-bold text-gray-800">Scientific/Technical Literature</h5>
571
- </div>
572
- <ul class="space-y-2 text-sm text-gray-700 pl-2">
573
- <li class="flex items-start">
574
- <i class="fas fa-check text-green-500 mt-1 mr-2 text-xs"></i>
575
- <span>Attached in full with bibliographic details.</span>
576
- </li>
577
- <li class="flex items-start">
578
- <i class="fas fa-check text-green-500 mt-1 mr-2 text-xs"></i>
579
- <span>Use short explanatory parentheticals in the brief.</span>
580
- </li>
581
- </ul>
582
- </div>
583
-
584
- <div class="bg-white p-5 rounded-lg border border-gray-200">
585
- <div class="flex items-center mb-3">
586
- <div class="bg-blue-100 p-2 rounded-full mr-3">
587
- <i class="fas fa-file-contract text-blue-600"></i>
588
- </div>
589
- <h5 class="font-bold text-gray-800">Audits, OIG/GAO Reports</h5>
590
- </div>
591
- <ul class="space-y-2 text-sm text-gray-700 pl-2">
592
- <li class="flex items-start">
593
- <i class="fas fa-check text-green-500 mt-1 mr-2 text-xs"></i>
594
- <span>Authenticate with declaration if needed.</span>
595
- </li>
596
- <li class="flex items-start">
597
- <i class="fas fa-check text-green-500 mt-1 mr-2 text-xs"></i>
598
- <span>Ask for judicial notice for indisputable facts.</span>
599
- </li>
600
- </ul>
601
- </div>
602
-
603
- <div class="bg-white p-5 rounded-lg border border-gray-200">
604
- <div class="flex items-center mb-3">
605
- <div class="bg-blue-100 p-2 rounded-full mr-3">
606
- <i class="fas fa-envelope text-blue-600"></i>
607
- </div>
608
- <h5 class="font-bold text-gray-800">Correspondence, Notices</h5>
609
- </div>
610
- <ul class="space-y-2 text-sm text-gray-700 pl-2">
611
- <li class="flex items-start">
612
- <i class="fas fa-check text-green-500 mt-1 mr-2 text-xs"></i>
613
- <span>Declarant with personal knowledge.</span>
614
- </li>
615
- <li class="flex items-start">
616
- <i class="fas fa-check text-green-500 mt-1 mr-2 text-xs"></i>
617
- <span>Include date, sender, recipient, and transmission method.</span>
618
- </li>
619
- </ul>
620
- </div>
621
-
622
- <div class="bg-white p-5 rounded-lg border border-gray-200">
623
- <div class="flex items-center mb-3">
624
- <div class="bg-blue-100 p-2 rounded-full mr-3">
625
- <i class="fas fa-desktop text-blue-600"></i>
626
- </div>
627
- <h5 class="font-bold text-gray-800">Digital Accessibility Evidence</h5>
628
- </div>
629
- <ul class="space-y-2 text-sm text-gray-700 pl-2">
630
- <li class="flex items-start">
631
- <i class="fas fa-check text-green-500 mt-1 mr-2 text-xs"></i>
632
- <span>Tester/engineer declaration detailing tools, environment, steps.</span>
633
- </li>
634
- <li class="flex items-start">
635
- <i class="fas fa-check text-green-500 mt-1 mr-2 text-xs"></i>
636
- <span>Include timestamps and pair with user impact declarations.</span>
637
- </li>
638
- </ul>
639
- </div>
640
- </div>
641
- </div>
642
-
643
- <div class="mb-8">
644
- <h4 class="font-bold text-lg text-gray-800 mb-3">Labeling, Indexing, and Redaction</h4>
645
-
646
- <div class="bg-white p-5 rounded-lg border border-gray-200">
647
- <div class="overflow-x-auto">
648
- <table class="min-w-full divide-y divide-gray-200 exhibit-table">
649
- <thead class="bg-gray-50">
650
- <tr>
651
- <th class="px-6 py-3 text-left text-xs font-medium text-gray-500 uppercase tracking-wider">Element</th>
652
- <th class="px-6 py-3 text-left text-xs font-medium text-gray-500 uppercase tracking-wider">Standard</th>
653
- <th class="px-6 py-3 text-left text-xs font-medium text-gray-500 uppercase tracking-wider">Status</th>
654
- </tr>
655
- </thead>
656
- <tbody class="bg-white divide-y divide-gray-200">
657
- <tr>
658
- <td class="px-6 py-4 whitespace-nowrap text-sm font-medium text-gray-900">Exhibit labels</td>
659
- <td class="px-6 py-4 whitespace-nowrap text-sm text-gray-500">Ex. 1, Ex. 2...; sub-exhibits as Ex. 5-A</td>
660
- <td class="px-6 py-4 whitespace-nowrap">
661
- <span class="px-2 inline-flex text-xs leading-5 font-semibold rounded-full bg-green-100 text-green-800">Complete</span>
662
- </td>
663
- </tr>
664
- <tr>
665
- <td class="px-6 py-4 whitespace-nowrap text-sm font-medium text-gray-900">Bates numbering</td>
666
- <td class="px-6 py-4 whitespace-nowrap text-sm text-gray-500">Prefix-000001 across all exhibits</td>
667
- <td class="px-6 py-4 whitespace-nowrap">
668
- <span class="px-2 inline-flex text-xs leading-5 font-semibold rounded-full bg-yellow-100 text-yellow-800">Pending</span>
669
- </td>
670
- </tr>
671
- <tr>
672
- <td class="px-6 py-4 whitespace-nowrap text-sm font-medium text-gray-900">Master Exhibit Index</td>
673
- <td class="px-6 py-4 whitespace-nowrap text-sm text-gray-500">Title, date, description, foundation source, confidentiality, page ranges</td>
674
- <td class="px-6 py-4 whitespace-nowrap">
675
- <span class="px-2 inline-flex text-xs leading-5 font-semibold rounded-full bg-blue-100 text-blue-800">In Progress</span>
676
- </td>
677
- </tr>
678
- <tr>
679
- <td class="px-6 py-4 whitespace-nowrap text-sm font-medium text-gray-900">Redactions</td>
680
- <td class="px-6 py-4 whitespace-nowrap text-sm text-gray-500">Comply with FRCP 5.2; create sealed and public versions</td>
681
- <td class="px-6 py-4 whitespace-nowrap">
682
- <span class="px-2 inline-flex text-xs leading-5 font-semibold rounded-full bg-yellow-100 text-yellow-800">Pending</span>
683
- </td>
684
- </tr>
685
- <tr>
686
- <td class="px-6 py-4 whitespace-nowrap text-sm font-medium text-gray-900">Bookmarks</td>
687
- <td class="px-6 py-4 whitespace-nowrap text-sm text-gray-500">Bookmark each exhibit and major headings in the PDF</td>
688
- <td class="px-6 py-4 whitespace-nowrap">
689
- <span class="px-2 inline-flex text-xs leading-5 font-semibold rounded-full bg-blue-100 text-blue-800">In Progress</span>
690
- </td>
691
- </tr>
692
- </tbody>
693
- </table>
694
- </div>
695
- </div>
696
- </div>
697
-
698
- <div>
699
- <h4 class="font-bold text-lg text-gray-800 mb-3">Your Current Exhibits</h4>
700
-
701
- <div class="bg-white p-5 rounded-lg border border-gray-200">
702
- <div class="overflow-x-auto">
703
- <table class="min-w-full divide-y divide-gray-200 exhibit-table">
704
- <thead class="bg-gray-50">
705
- <tr>
706
- <th class="px-6 py-3 text-left text-xs font-medium text-gray-500 uppercase tracking-wider">Exhibit</th>
707
- <th class="px-6 py-3 text-left text-xs font-medium text-gray-500 uppercase tracking-wider">Description</th>
708
- <th class="px-6 py-3 text-left text-xs font-medium text-gray-500 uppercase tracking-wider">Status</th>
709
- <th class="px-6 py-3 text-left text-xs font-medium text-gray-500 uppercase tracking-wider">Actions</th>
710
- </tr>
711
- </thead>
712
- <tbody class="bg-white divide-y divide-gray-200">
713
- <tr>
714
- <td class="px-6 py-4 whitespace-nowrap text-sm font-medium text-gray-900">Appendix A</td>
715
- <td class="px-6 py-4 text-sm text-gray-500">Functional MRI (fMRI) Evidence</td>
716
- <td class="px-6 py-4 whitespace-nowrap">
717
- <span class="px-2 inline-flex text-xs leading-5 font-semibold rounded-full bg-green-100 text-green-800">Uploaded</span>
718
- </td>
719
- <td class="px-6 py-4 whitespace-nowrap text-sm font-medium">
720
- <a href="#" class="text-blue-600 hover:text-blue-900 mr-3">View</a>
721
- <a href="#" class="text-blue-600 hover:text-blue-900">Edit</a>
722
- </td>
723
- </tr>
724
- <tr>
725
- <td class="px-6 py-4 whitespace-nowrap text-sm font-medium text-gray-900">Appendix B</td>
726
- <td class="px-6 py-4 text-sm text-gray-500">Bibliography of Supporting Literature</td>
727
- <td class="px-6 py-4 whitespace-nowrap">
728
- <span class="px-2 inline-flex text-xs leading-5 font-semibold rounded-full bg-green-100 text-green-800">Uploaded</span>
729
- </td>
730
- <td class="px-6 py-4 whitespace-nowrap text-sm font-medium">
731
- <a href="#" class="text-blue-600 hover:text-blue-900 mr-3">View</a>
732
- <a href="#" class="text-blue-600 hover:text-blue-900">Edit</a>
733
- </td>
734
- </tr>
735
- <tr>
736
- <td class="px-6 py-4 whitespace-nowrap text-sm font-medium text-gray-900">Appendix C</td>
737
- <td class="px-6 py-4 text-sm text-gray-500">SNP Data Analysis</td>
738
- <td class="px-6 py-4 whitespace-nowrap">
739
- <span class="px-2 inline-flex text-xs leading-5 font-semibold rounded-full bg-green-100 text-green-800">Uploaded</span>
740
- </td>
741
- <td class="px-6 py-4 whitespace-nowrap text-sm font-medium">
742
- <a href="#" class="text-blue-600 hover:text-blue-900 mr-3">View</a>
743
- <a href="#" class="text-blue-600 hover:text-blue-900">Edit</a>
744
- </td>
745
- </tr>
746
- <tr>
747
- <td class="px-6 py-4 whitespace-nowrap text-sm font-medium text-gray-900">Appendix D</td>
748
- <td class="px-6 py-4 text-sm text-gray-500">Neurogenetic Crosswalk Table</td>
749
- <td class="px-6 py-4 whitespace-nowrap">
750
- <span class="px-2 inline-flex text-xs leading-5 font-semibold rounded-full bg-green-100 text-green-800">Uploaded</span>
751
- </td>
752
- <td class="px-6 py-4 whitespace-nowrap text-sm font-medium">
753
- <a href="#" class="text-blue-600 hover:text-blue-900 mr-3">View</a>
754
- <a href="#" class="text-blue-600 hover:text-blue-900">Edit</a>
755
- </td>
756
- </tr>
757
- <tr>
758
- <td class="px-6 py-4 whitespace-nowrap text-sm font-medium text-gray-900">Appendix E</td>
759
- <td class="px-6 py-4 text-sm text-gray-500">Case Dockets Timeline</td>
760
- <td class="px-6 py-4 whitespace-nowrap">
761
- <span class="px-2 inline-flex text-xs leading-5 font-semibold rounded-full bg-blue-100 text-blue-800">Draft</span>
762
- </td>
763
- <td class="px-6 py-4 whitespace-nowrap text-sm font-medium">
764
- <a href="#" class="text-blue-600 hover:text-blue-900 mr-3">View</a>
765
- <a href="#" class="text-blue-600 hover:text-blue-900">Edit</a>
766
- </td>
767
- </tr>
768
- </tbody>
769
- </table>
770
- </div>
771
-
772
- <div class="mt-4">
773
- <button class="bg-blue-600 hover:bg-blue-700 text-white px-4 py-2 rounded-lg text-sm font-medium">
774
- <i class="fas fa-plus mr-1"></i> Add New Exhibit
775
- </button>
776
- </div>
777
- </div>
778
- </div>
779
- </div>
780
- </div>
781
-
782
- <div class="tab-content" id="templates">
783
- <div class="p-6 border-t border-gray-200">
784
- <h3 class="text-xl font-semibold text-gray-800 mb-4">Templates</h3>
785
-
786
- <div class="grid md:grid-cols-2 gap-6">
787
- <div class="bg-white p-6 rounded-lg border border-gray-200">
788
- <div class="flex items-center mb-4">
789
- <div class="bg-blue-100 p-3 rounded-full mr-4">
790
- <i class="fas fa-table text-blue-600"></i>
791
- </div>
792
- <div>
793
- <h4 class="font-bold text-gray-800">Master Exhibit Index</h4>
794
- <p class="text-gray-600 text-sm">Fill and we'll finalize for your case</p>
795
- </div>
796
- </div>
797
- <div class="overflow-x-auto">
798
- <table class="min-w-full border border-gray-200">
799
- <thead class="bg-gray-50">
800
- <tr>
801
- <th class="px-4 py-2 text-left text-xs font-medium text-gray-500 uppercase tracking-wider border">No.</th>
802
- <th class="px-4 py-2 text-left text-xs font-medium text-gray-500 uppercase tracking-wider border">Bates start–end</th>
803
- <th class="px-4 py-2 text-left text-xs font-medium text-gray-500 uppercase tracking-wider border">Title/description</th>
804
- <th class="px-4 py-2 text-left text-xs font-medium text-gray-500 uppercase tracking-wider border">Date</th>
805
- <th class="px-4 py-2 text-left text-xs font-medium text-gray-500 uppercase tracking-wider border">Source/foundation</th>
806
- <th class="px-4 py-2 text-left text-xs font-medium text-gray-500 uppercase tracking-wider border">Confidentiality</th>
807
- <th class="px-4 py-2 text-left text-xs font-medium text-gray-500 uppercase tracking-wider border">Notes</th>
808
- </tr>
809
- </thead>
810
- <tbody>
811
- <tr>
812
- <td class="px-4 py-2 text-sm border">1</td>
813
- <td class="px-4 py-2 text-sm border">MCLA-000001-000015</td>
814
- <td class="px-4 py-2 text-sm border">fMRI Analysis Report</td>
815
- <td class="px-4 py-2 text-sm border">03/15/2023</td>
816
- <td class="px-4 py-2 text-sm border">Neuroimaging Center</td>
817
- <td class="px-4 py-2 text-sm border">None</td>
818
- <td class="px-4 py-2 text-sm border">Demonstrates executive dysfunction</td>
819
- </tr>
820
- <tr>
821
- <td class="px-4 py-2 text-sm border">2</td>
822
- <td class="px-4 py-2 text-sm border">MCLA-000016-000025</td>
823
- <td class="px-4 py-2 text-sm border">Neuropsychological Evaluation</td>
824
- <td class="px-4 py-2 text-sm border">05/22/2023</td>
825
- <td class="px-4 py-2 text-sm border">Dr. Smith</td>
826
- <td class="px-4 py-2 text-sm border">PHI Redacted</td>
827
- <td class="px-4 py-2 text-sm border">Quantifies memory deficits</td>
828
- </tr>
829
- <tr>
830
- <td class="px-4 py-2 text-sm border">3</td>
831
- <td class="px-4 py-2 text-sm border">MCLA-000026-000042</td>
832
- <td class="px-4 py-2 text-sm border">Genetic Testing Results</td>
833
- <td class="px-4 py-2 text-sm border">08/10/2023</td>
834
- <td class="px-4 py-2 text-sm border">Genomics Lab</td>
835
- <td class="px-4 py-2 text-sm border">PII Redacted</td>
836
- <td class="px-4 py-2 text-sm border">SNP panel attached</td>
837
- </tr>
838
- </tbody>
839
- </table>
840
- </div>
841
- <div class="mt-4">
842
- <button class="bg-blue-600 hover:bg-blue-700 text-white px-4 py-2 rounded-lg text-sm font-medium">
843
- <i class="fas fa-download mr-1"></i> Download Template
844
- </button>
845
- </div>
846
- </div>
847
-
848
- <div class="bg-white p-6 rounded-lg border border-gray-200">
849
- <div class="flex items-center mb-4">
850
- <div class="bg-blue-100 p-3 rounded-full mr-4">
851
- <i class="fas fa-file-signature text-blue-600"></i>
852
- </div>
853
- <div>
854
- <h4 class="font-bold text-gray-800">Declaration Template</h4>
855
- <p class="text-gray-600 text-sm">28 U.S.C. § 1746 format</p>
856
- </div>
857
- </div>
858
- <div class="bg-gray-50 p-4 rounded-lg">
859
- <pre class="text-xs text-gray-800 overflow-x-auto">DECLARATION OF [NAME]
860
-
861
- I, [Name], declare as follows:
862
-
863
- 1. I am [role/qualifications]. I have personal knowledge of the facts set forth herein and could competently testify to them.
864
- 2. [Foundation paragraph: how the declarant obtained/created the exhibit(s), dates, methods, and authenticity.]
865
- 3. [Substantive paragraph: observations, testing methodology, results, or facts relevant to issues before the Court.]
866
- 4. Attached as Exhibit [X] are true and correct copies of [description]. The Bates numbers for these documents are [PREFIX-000123–000256].
867
-
868
- I declare under penalty of perjury that the foregoing is true and correct.
869
-
870
- Executed on [date], at [city, state].
871
-
872
- [Signature]
873
- [Name]</pre>
874
- </div>
875
- <div class="mt-4">
876
- <button class="bg-blue-600 hover:bg-blue-700 text-white px-4 py-2 rounded-lg text-sm font-medium">
877
- <i class="fas fa-download mr-1"></i> Download Template
878
- </button>
879
- </div>
880
- </div>
881
-
882
- <div class="bg-white p-6 rounded-lg border border-gray-200">
883
- <div class="flex items-center mb-4">
884
- <div class="bg-blue-100 p-3 rounded-full mr-4">
885
- <i class="fas fa-lock text-blue-600"></i>
886
- </div>
887
- <div>
888
- <h4 class="font-bold text-gray-800">Motion to Seal</h4>
889
- <p class="text-gray-600 text-sm">Skeleton framework</p>
890
- </div>
891
- </div>
892
- <div class="bg-gray-50 p-4 rounded-lg">
893
- <pre class="text-xs text-gray-800 overflow-x-auto">[Caption]
894
-
895
- MOTION TO SEAL CERTAIN EXHIBITS
896
-
897
- Plaintiff respectfully moves to seal Exhibits [list], which contain [PHI/PII/proprietary details]. Good cause exists because [specific harms]. Plaintiff proposes filing redacted public versions and lodging unredacted versions under seal. This request is narrowly tailored.
898
-
899
- Dated: [date]
900
- [Signature block]</pre>
901
- </div>
902
- <div class="mt-4">
903
- <button class="bg-blue-600 hover:bg-blue-700 text-white px-4 py-2 rounded-lg text-sm font-medium">
904
- <i class="fas fa-download mr-1"></i> Download Template
905
- </button>
906
- </div>
907
- </div>
908
-
909
- <div class="bg-white p-6 rounded-lg border border-gray-200">
910
- <div class="flex items-center mb-4">
911
- <div class="bg-blue-100 p-3 rounded-full mr-4">
912
- <i class="fas fa-envelope-open-text text-blue-600"></i>
913
- </div>
914
- <div>
915
- <h4 class="font-bold text-gray-800">Certificate of Service</h4>
916
- <p class="text-gray-600 text-sm">ECF filing format</p>
917
- </div>
918
- </div>
919
- <div class="bg-gray-50 p-4 rounded-lg">
920
- <pre class="text-xs text-gray-800 overflow-x-auto">I certify that on [date], I filed the foregoing via the Court's CM/ECF system, which will send notice to all counsel of record.
921
-
922
- [Signature]</pre>
923
- </div>
924
- <div class="mt-4">
925
- <button class="bg-blue-600 hover:bg-blue-700 text-white px-4 py-2 rounded-lg text-sm font-medium">
926
- <i class="fas fa-download mr-1"></i> Download Template
927
- </button>
928
- </div>
929
- </div>
930
- </div>
931
- </div>
932
- </div>
933
-
934
- <div class="tab-content" id="checklist">
935
- <div class="p-6 border-t border-gray-200">
936
- <h3 class="text-xl font-semibold text-gray-800 mb-4">Final Delivery Checklist</h3>
937
-
938
- <div class="bg-white p-6 rounded-lg border border-gray-200">
939
- <div class="space-y-4">
940
- <div class="flex items-start">
941
- <input type="checkbox" id="check1" class="mt-1 mr-3 h-5 w-5 text-blue-600 rounded">
942
- <div>
943
- <label for="check1" class="font-medium text-gray-800">Clean architecture</label>
944
- <p class="text-sm text-gray-600">Questions Presented, Summary, Jurisdiction/Standing, Standard of Review, Merits, Remedy all present and aligned.</p>
945
- </div>
946
- </div>
947
-
948
- <div class="flex items-start">
949
- <input type="checkbox" id="check2" class="mt-1 mr-3 h-5 w-5 text-blue-600 rounded">
950
- <div>
951
- <label for="check2" class="font-medium text-gray-800">Tight prose</label>
952
- <p class="text-sm text-gray-600">Remove redundancies; lead each section with a clear, outcome-oriented topic sentence.</p>
953
- </div>
954
- </div>
955
-
956
- <div class="flex items-start">
957
- <input type="checkbox" id="check3" class="mt-1 mr-3 h-5 w-5 text-blue-600 rounded">
958
- <div>
959
- <label for="check3" class="font-medium text-gray-800">Pincites everywhere</label>
960
- <p class="text-sm text-gray-600">Authority and record have precise pincites; authorities italicized per Bluebook; short forms consistent.</p>
961
- </div>
962
- </div>
963
-
964
- <div class="flex items-start">
965
- <input type="checkbox" id="check4" class="mt-1 mr-3 h-5 w-5 text-blue-600 rounded">
966
- <div>
967
- <label for="check4" class="font-medium text-gray-800">Exhibit calls</label>
968
- <p class="text-sm text-gray-600">In-text calls like (Ex. 7 at 12–14; AR 1234–36); match the Master Index.</p>
969
- </div>
970
- </div>
971
-
972
- <div class="flex items-start">
973
- <input type="checkbox" id="check5" class="mt-1 mr-3 h-5 w-5 text-blue-600 rounded">
974
- <div>
975
- <label for="check5" class="font-medium text-gray-800">Exhibits filed properly</label>
976
- <p class="text-sm text-gray-600">Bates, bookmarks, redactions, and any motions to seal included.</p>
977
- </div>
978
- </div>
979
-
980
- <div class="flex items-start">
981
- <input type="checkbox" id="check6" class="mt-1 mr-3 h-5 w-5 text-blue-600 rounded">
982
- <div>
983
- <label for="check6" class="font-medium text-gray-800">TOC/TOA</label>
984
- <p class="text-sm text-gray-600">Auto-generated, accurate page numbers; authorities sorted correctly.</p>
985
- </div>
986
- </div>
987
-
988
- <div class="flex items-start">
989
- <input type="checkbox" id="check7" class="mt-1 mr-3 h-5 w-5 text-blue-600 rounded">
990
- <div>
991
- <label for="check7" class="font-medium text-gray-800">Signature and compliance</label>
992
- <p class="text-sm text-gray-600">Signature block, word-count certificate if required, and local-rule compliance.</p>
993
- </div>
994
- </div>
995
-
996
- <div class="flex items-start">
997
- <input type="checkbox" id="check8" class="mt-1 mr-3 h-5 w-5 text-blue-600 rounded">
998
- <div>
999
- <label for="check8" class="font-medium text-gray-800">Accessibility</label>
1000
- <p class="text-sm text-gray-600">PDFs are tagged, readable text (no image-only), and headings/bookmarks reflect structure.</p>
1001
- </div>
1002
- </div>
1003
- </div>
1004
-
1005
- <div class="mt-8">
1006
- <h4 class="font-bold text-lg text-gray-800 mb-3">Case-Specific Checklist Items</h4>
1007
-
1008
- <div class="space-y-4">
1009
- <div class="flex items-start">
1010
- <input type="checkbox" id="check9" class="mt-1 mr-3 h-5 w-5 text-blue-600 rounded" checked>
1011
- <div>
1012
- <label for="check9" class="font-medium text-gray-800">Neurogenetic evidence properly cited</label>
1013
- <p class="text-sm text-gray-600">All SNP data cross-referenced to SSA listings in Appendix D.</p>
1014
- </div>
1015
- </div>
1016
-
1017
- <div class="flex items-start">
1018
- <input type="checkbox" id="check10" class="mt-1 mr-3 h-5 w-5 text-blue-600 rounded" checked>
1019
- <div>
1020
- <label for="check10" class="font-medium text-gray-800">fMRI methodology explained</label>
1021
- <p class="text-sm text-gray-600">Technical details translated for judicial understanding in Appendix A.</p>
1022
- </div>
1023
- </div>
1024
-
1025
- <div class="flex items-start">
1026
- <input type="checkbox" id="check11" class="mt-1 mr-3 h-5 w-5 text-blue-600 rounded">
1027
- <div>
1028
- <label for="check11" class="font-medium text-gray-800">Tucker Act damages calculated</label>
1029
- <p class="text-sm text-gray-600">$43,200 figure supported by payment records and timeline.</p>
1030
- </div>
1031
- </div>
1032
-
1033
- <div class="flex items-start">
1034
- <input type="checkbox" id="check12" class="mt-1 mr-3 h-5 w-5 text-blue-600 rounded">
1035
- <div>
1036
- <label for="check12" class="font-medium text-gray-800">Legislative mandate feasibility</label>
1037
- <p class="text-sm text-gray-600">$243 million allocation justified with implementation plan.</p>
1038
- </div>
1039
- </div>
1040
- </div>
1041
- </div>
1042
-
1043
- <div class="mt-8 flex justify-between items-center">
1044
- <div>
1045
- <p class="text-sm text-gray-600">Progress: <span class="font-medium">65% complete</span></p>
1046
- <div class="w-full bg-gray-200 rounded-full h-2.5 mt-1">
1047
- <div class="bg-blue-600 h-2.5 rounded-full" style="width: 65%"></div>
1048
- </div>
1049
- </div>
1050
- <button class="bg-blue-600 hover:bg-blue-700 text-white px-6 py-3 rounded-lg font-medium">
1051
- <i class="fas fa-file-export mr-2"></i> Generate Final Report
1052
- </button>
1053
- </div>
1054
- </div>
1055
- </div>
1056
- </div>
1057
- </div>
1058
-
1059
- <div class="bg-white rounded-xl shadow-md overflow-hidden mt-8">
1060
- <div class="p-6 border-b border-gray-200">
1061
- <h3 class="text-xl font-semibold text-gray-800 mb-2">Next Steps</h3>
1062
- <p class="text-gray-600 mb-4">Send us the following to proceed with finalizing your filing:</p>
1063
-
1064
- <div class="grid md:grid-cols-3 gap-6">
1065
- <div class="bg-blue-50 p-5 rounded-lg border border-blue-200">
1066
- <div class="flex items-center mb-3">
1067
- <div class="bg-blue-100 p-2 rounded-full mr-3">
1068
- <i class="fas fa-file-text text-blue-600"></i>
1069
- </div>
1070
- <h4 class="font-bold text-blue-800">Document Text</h4>
1071
- </div>
1072
- <p class="text-sm text-gray-700">The document text (even in chunks)</p>
1073
- <button class="mt-3 bg-blue-600 hover:bg-blue-700 text-white px-4 py-2 rounded-lg text-sm font-medium">
1074
- <i class="fas fa-upload mr-1"></i> Upload Documents
1075
- </button>
1076
- </div>
1077
-
1078
- <div class="bg-blue-50 p-5 rounded-lg border border-blue-200">
1079
- <div class="flex items-center mb-3">
1080
- <div class="bg-blue-100 p-2 rounded-full mr-3">
1081
- <i class="fas fa-gavel text-blue-600"></i>
1082
- </div>
1083
- <h4 class="font-bold text-blue-800">Court Details</h4>
1084
- </div>
1085
- <p class="text-sm text-gray-700">The court/posture and deadline</p>
1086
- <button class="mt-3 bg-blue-600 hover:bg-blue-700 text-white px-4 py-2 rounded-lg text-sm font-medium">
1087
- <i class="fas fa-edit mr-1"></i> Review Details
1088
- </button>
1089
- </div>
1090
-
1091
- <div class="bg-blue-50 p-5 rounded-lg border border-blue-200">
1092
- <div class="flex items-center mb-3">
1093
- <div class="bg-blue-100 p-2 rounded-full mr-3">
1094
- <i class="fas fa-folder-open text-blue-600"></i>
1095
- </div>
1096
- <h4 class="font-bold text-blue-800">Exhibit List</h4>
1097
- </div>
1098
- <p class="text-sm text-gray-700">Your current or tentative exhibit list (even rough)</p>
1099
- <button class="mt-3 bg-blue-600 hover:bg-blue-700 text-white px-4 py-2 rounded-lg text-sm font-medium">
1100
- <i class="fas fa-list mr-1"></i> Manage Exhibits
1101
- </button>
1102
- </div>
1103
- </div>
1104
-
1105
- <div class="mt-6 bg-yellow-50 border-l-4 border-yellow-400 p-4">
1106
- <div class="flex">
1107
- <div class="flex-shrink-0">
1108
- <i class="fas fa-exclamation-circle text-yellow-400 mt-1"></i>
1109
- </div>
1110
- <div class="ml-3">
1111
- <p class="text-sm text-yellow-700">
1112
- <span class="font-medium">Important:</span> Once submitted, we'll tighten the argument, insert precise record and authority pincites, build the Master Exhibit Index, draft needed declarations/motions to seal, and return a filing-ready brief with exhibits and a compliance checklist.
1113
- </p>
1114
- </div>
1115
- </div>
1116
- </div>
1117
- </div>
1118
-
1119
- <div class="bg-gray-50 px-6 py-4 flex justify-end">
1120
- <button class="bg-green-600 hover:bg-green-700 text-white px-6 py-3 rounded-lg font-medium flex items-center">
1121
- <i class="fas fa-paper-plane mr-2"></i> Submit All Materials
1122
- </button>
1123
- </div>
1124
- </div>
1125
- </main>
1126
-
1127
- <footer class="bg-gray-800 text-white py-8">
1128
- <div class="container mx-auto px-4">
1129
- <div class="grid md:grid-cols-4 gap-8">
1130
- <div>
1131
- <h3 class="text-lg font-semibold mb-4">Caustino Legal Services</h3>
1132
- <p class="text-gray-400 text-sm">Specializing in SSDI appeals and disability rights litigation with a focus on neurogenetic evidence integration.</p>
1133
- </div>
1134
- <div>
1135
- <h3 class="text-lg font-semibold mb-4">Quick Links</h3>
1136
- <ul class="space-y-2 text-gray-400">
1137
- <li><a href="#" class="hover:text-white">Home</a></li>
1138
- <li><a href="#" class="hover:text-white">Services</a></li>
1139
- <li><a href="#" class="hover:text-white">Resources</a></li>
1140
- <li><a href="#" class="hover:text-white">Contact</a></li>
1141
- </ul>
1142
- </div>
1143
- <div>
1144
- <h3 class="text-lg font-semibold mb-4">Contact Us</h3>
1145
- <ul class="space-y-2 text-gray-400">
1146
- <li class="flex items-center"><i class="fas fa-map-marker-alt mr-2"></i> 123 Legal Ave, Suite 400</li>
1147
- <li class="flex items-center"><i class="fas fa-phone mr-2"></i> (555) 123-4567</li>
1148
- <li class="flex items-center"><i class="fas fa-envelope mr-2"></i> help@caustinolegal.com</li>
1149
- </ul>
1150
- </div>
1151
- <div>
1152
- <h3 class="text-lg font-semibold mb-4">Follow Us</h3>
1153
- <div class="flex space-x-4">
1154
- <a href="#" class="text-gray-400 hover:text-white"><i class="fab fa-twitter fa-lg"></i></a>
1155
- <a href="#" class="text-gray-400 hover:text-white"><i class="fab fa-linkedin fa-lg"></i></a>
1156
- <a href="#" class="text-gray-400 hover:text-white"><i class="fab fa-facebook fa-lg"></i></a>
1157
- </div>
1158
- </div>
1159
- </div>
1160
- <div class="border-t border-gray-700 mt-8 pt-6 text-center text-gray-400 text-sm">
1161
- <p>© 2024 Caustino Legal Services. All rights reserved.</p>
1162
- </div>
1163
- </div>
1164
- </footer>
1165
-
1166
  <script>
1167
- // Tab functionality
1168
- const tabBtns = document.querySelectorAll('.tab-btn');
1169
- const tabContents = document.querySelectorAll('.tab-content');
1170
-
1171
- tabBtns.forEach(btn => {
1172
- btn.addEventListener('click', () => {
1173
- // Remove active class from all buttons and contents
1174
- tabBtns.forEach(b => b.classList.remove('active', 'border-blue-600', 'text-blue-600'));
1175
- tabContents.forEach(c => c.classList.remove('active'));
1176
-
1177
- // Add active class to clicked button
1178
- btn.classList.add('active', 'border-blue-600', 'text-blue-600');
1179
-
1180
- // Show corresponding content
1181
- const tabId = btn.getAttribute('data-tab');
1182
- document.getElementById(tabId).classList.add('active');
1183
- });
1184
- });
1185
-
1186
- // Simulate progress update
1187
- setTimeout(() => {
1188
- document.querySelector('.progress-bar').style.width = '75%';
1189
- }, 1000);
1190
-
1191
- // Tooltip functionality
1192
- const tooltipTriggers = document.querySelectorAll('.has-tooltip');
1193
- tooltipTriggers.forEach(trigger => {
1194
- trigger.addEventListener('mouseenter', () => {
1195
- const tooltip = trigger.querySelector('.tooltip');
1196
- if (tooltip) {
1197
- tooltip.style.visibility = 'visible';
1198
- tooltip.style.opacity = '1';
1199
- }
1200
- });
1201
- trigger.addEventListener('mouseleave', () => {
1202
- const tooltip = trigger.querySelector('.tooltip');
1203
- if (tooltip) {
1204
- tooltip.style.visibility = 'hidden';
1205
- tooltip.style.opacity = '0';
1206
- }
1207
- });
1208
- });
1209
  </script>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1210
  </body>
1211
- </html>
 
1
+
2
  <!DOCTYPE html>
3
+ <html lang="en" class="dark">
4
  <head>
5
+ <meta charset="UTF-8" />
6
+ <meta name="viewport" content="width=device-width, initial-scale=1.0" />
7
+ <title>SSDI Case Prep Assistant</title>
8
  <script src="https://cdn.tailwindcss.com"></script>
9
+ <link rel="preconnect" href="https://fonts.googleapis.com">
10
+ <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
11
+ <link href="https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700&family=Lexend:wght@400;500;600;700&display=swap" rel="stylesheet">
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
12
  <script>
13
+ tailwind.config = {
14
+ darkMode: 'class',
15
+ theme: {
16
+ extend: {
17
+ fontFamily: {
18
+ sans: ['Inter', 'sans-serif'],
19
+ display: ['Lexend', 'sans-serif'],
20
+ },
21
+ colors: {
22
+ 'brand-primary': '#4F46E5',
23
+ 'brand-secondary': '#7C3AED',
24
+ 'gray': {
25
+ 50: '#F9FAFB',
26
+ 100: '#F3F4F6',
27
+ 200: '#E5E7EB',
28
+ 300: '#D1D5DB',
29
+ 400: '#9CA3AF',
30
+ 500: '#6B7280',
31
+ 600: '#4B5563',
32
+ 700: '#374151',
33
+ 800: '#1F2937',
34
+ 900: '#111827',
35
+ 950: '#030712'
36
+ }
37
+ }
38
+ }
39
+ }
40
+ }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
41
  </script>
42
+ <script type="importmap">
43
+ {
44
+ "imports": {
45
+ "react": "https://esm.sh/react@^19.1.1",
46
+ "react-dom/": "https://esm.sh/react-dom@^19.1.1/",
47
+ "react/": "https://esm.sh/react@^19.1.1/",
48
+ "@google/genai": "https://esm.sh/@google/genai@^1.14.0"
49
+ }
50
+ }
51
+ </script>
52
+ <link rel="stylesheet" href="/index.css">
53
+ </head>
54
+ <body class="bg-gray-950 text-gray-100 font-sans">
55
+ <div id="root"></div>
56
+ <script type="module" src="/index.tsx"></script>
57
  </body>
58
+ </html>
index.tsx ADDED
@@ -0,0 +1,16 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+
2
+ import React from 'react';
3
+ import ReactDOM from 'react-dom/client';
4
+ import App from './App';
5
+
6
+ const rootElement = document.getElementById('root');
7
+ if (!rootElement) {
8
+ throw new Error("Could not find root element to mount to");
9
+ }
10
+
11
+ const root = ReactDOM.createRoot(rootElement);
12
+ root.render(
13
+ <React.StrictMode>
14
+ <App />
15
+ </React.StrictMode>
16
+ );
metadata.json ADDED
@@ -0,0 +1,5 @@
 
 
 
 
 
 
1
+ {
2
+ "name": "SSDI Case Prep Assistant",
3
+ "description": "An intelligent assistant to help users organize and strengthen their legal documents for SSDI cases. It provides a structured plan to gather necessary information, track progress, and follow AI-powered recommendations.",
4
+ "requestFramePermissions": []
5
+ }
package.json ADDED
@@ -0,0 +1,21 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "name": "ssdi-case-prep-assistant",
3
+ "private": true,
4
+ "version": "0.0.0",
5
+ "type": "module",
6
+ "scripts": {
7
+ "dev": "vite",
8
+ "build": "vite build",
9
+ "preview": "vite preview"
10
+ },
11
+ "dependencies": {
12
+ "react": "^19.1.1",
13
+ "react-dom": "^19.1.1",
14
+ "@google/genai": "^1.14.0"
15
+ },
16
+ "devDependencies": {
17
+ "@types/node": "^22.14.0",
18
+ "typescript": "~5.8.2",
19
+ "vite": "^6.2.0"
20
+ }
21
+ }
services/geminiService.ts ADDED
@@ -0,0 +1,93 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+
2
+ import { GoogleGenAI, Type } from "@google/genai";
3
+ import type { ActionPlan, CaseData } from '../types';
4
+
5
+ if (!process.env.API_KEY) {
6
+ throw new Error("API_KEY environment variable is not set");
7
+ }
8
+
9
+ const ai = new GoogleGenAI({ apiKey: process.env.API_KEY });
10
+
11
+ const responseSchema = {
12
+ type: Type.OBJECT,
13
+ properties: {
14
+ title: { type: Type.STRING, description: "A concise title for the action plan." },
15
+ summary: { type: Type.STRING, description: "A brief summary of the action plan and its goals." },
16
+ categories: {
17
+ type: Type.ARRAY,
18
+ description: "A list of categories for action items, e.g., 'Medical Documentation', 'Work History Evidence'.",
19
+ items: {
20
+ type: Type.OBJECT,
21
+ properties: {
22
+ category: { type: Type.STRING, description: "The name of the category." },
23
+ description: { type: Type.STRING, description: "A short description of this category's purpose." },
24
+ items: {
25
+ type: Type.ARRAY,
26
+ description: "A list of specific action items within this category.",
27
+ items: {
28
+ type: Type.OBJECT,
29
+ properties: {
30
+ item: { type: Type.STRING, description: "The specific action item or task to complete." },
31
+ description: { type: Type.STRING, description: "A detailed explanation of why this item is important and how to complete it." },
32
+ status: { type: Type.STRING, description: "The initial status, which should always be 'Not Started'." }
33
+ },
34
+ required: ["item", "description", "status"]
35
+ }
36
+ }
37
+ },
38
+ required: ["category", "description", "items"]
39
+ }
40
+ }
41
+ },
42
+ required: ["title", "summary", "categories"]
43
+ };
44
+
45
+
46
+ const createPrompt = (data: CaseData): string => {
47
+ return `
48
+ Analyze the following Social Security Disability Insurance (SSDI) case details and generate a comprehensive, step-by-step action plan for the applicant.
49
+
50
+ **Applicant's Case Details:**
51
+ - **Age:** ${data.age}
52
+ - **Diagnosed Medical Conditions:** ${data.medicalConditions}
53
+ - **Summary of Work History (last 15 years):** ${data.workHistory}
54
+ - **Daily Limitations and Difficulties:** ${data.limitations}
55
+
56
+ **Your Task:**
57
+ Create a detailed action plan in JSON format. The plan should be structured to guide the applicant in gathering the necessary evidence to build a strong SSDI claim.
58
+
59
+ **Key areas to cover in the plan:**
60
+ 1. **Medical Documentation:** Gathering records, doctor's statements, test results, etc.
61
+ 2. **Work History Evidence:** Documenting past jobs, job duties, and why they can no longer be performed.
62
+ 3. **Activities of Daily Living (ADL):** Creating logs or journals that detail daily struggles.
63
+ 4. **Third-Party Evidence:** Obtaining statements from family, friends, or former colleagues.
64
+
65
+ For each action item, provide a clear task ("item") and a detailed "description" explaining its importance and providing guidance. Every item's initial "status" must be "Not Started".
66
+
67
+ Generate the output strictly following the provided JSON schema.
68
+ `;
69
+ };
70
+
71
+
72
+ export const generateActionPlan = async (data: CaseData): Promise<ActionPlan> => {
73
+ const prompt = createPrompt(data);
74
+
75
+ try {
76
+ const response = await ai.models.generateContent({
77
+ model: "gemini-2.5-flash",
78
+ contents: prompt,
79
+ config: {
80
+ responseMimeType: "application/json",
81
+ responseSchema: responseSchema,
82
+ temperature: 0.5,
83
+ },
84
+ });
85
+
86
+ const jsonString = response.text.trim();
87
+ const plan: ActionPlan = JSON.parse(jsonString);
88
+ return plan;
89
+ } catch (error) {
90
+ console.error("Error calling Gemini API:", error);
91
+ throw new Error("Failed to generate action plan from Gemini API.");
92
+ }
93
+ };
tsconfig.json ADDED
@@ -0,0 +1,26 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "compilerOptions": {
3
+ "target": "ES2022",
4
+ "experimentalDecorators": true,
5
+ "useDefineForClassFields": false,
6
+ "module": "ESNext",
7
+ "lib": [
8
+ "ES2022",
9
+ "DOM",
10
+ "DOM.Iterable"
11
+ ],
12
+ "skipLibCheck": true,
13
+ "moduleResolution": "bundler",
14
+ "isolatedModules": true,
15
+ "moduleDetection": "force",
16
+ "allowJs": true,
17
+ "jsx": "react-jsx",
18
+ "paths": {
19
+ "@/*": [
20
+ "./*"
21
+ ]
22
+ },
23
+ "allowImportingTsExtensions": true,
24
+ "noEmit": true
25
+ }
26
+ }
types.ts ADDED
@@ -0,0 +1,27 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+
2
+ export type ActionItemStatus = 'Not Started' | 'In Progress' | 'Completed';
3
+
4
+ export interface ActionItem {
5
+ item: string;
6
+ description: string;
7
+ status: ActionItemStatus;
8
+ }
9
+
10
+ export interface PlanCategory {
11
+ category: string;
12
+ description: string;
13
+ items: ActionItem[];
14
+ }
15
+
16
+ export interface ActionPlan {
17
+ title: string;
18
+ summary: string;
19
+ categories: PlanCategory[];
20
+ }
21
+
22
+ export interface CaseData {
23
+ age: string;
24
+ medicalConditions: string;
25
+ workHistory: string;
26
+ limitations: string;
27
+ }
vite.config.ts ADDED
@@ -0,0 +1,17 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import path from 'path';
2
+ import { defineConfig, loadEnv } from 'vite';
3
+
4
+ export default defineConfig(({ mode }) => {
5
+ const env = loadEnv(mode, '.', '');
6
+ return {
7
+ define: {
8
+ 'process.env.API_KEY': JSON.stringify(env.GEMINI_API_KEY),
9
+ 'process.env.GEMINI_API_KEY': JSON.stringify(env.GEMINI_API_KEY)
10
+ },
11
+ resolve: {
12
+ alias: {
13
+ '@': path.resolve(__dirname, '.'),
14
+ }
15
+ }
16
+ };
17
+ });