From e52d64483755e776b3798eb9c42e0a8b8524ad9a Mon Sep 17 00:00:00 2001 From: Cal Date: Wed, 14 Jan 2026 09:45:37 -0800 Subject: [PATCH 01/17] favicon and header --- client/index.html | 41 +++++++++++++++++++++++++++++++++----- client/public/favicon.ico | Bin 0 -> 2605 bytes client/public/favicon.svg | 10 ++++++++++ 3 files changed, 46 insertions(+), 5 deletions(-) create mode 100644 client/public/favicon.ico create mode 100644 client/public/favicon.svg diff --git a/client/index.html b/client/index.html index 4330dc3..dfe64f4 100644 --- a/client/index.html +++ b/client/index.html @@ -2,10 +2,41 @@ - - - - Web App Template + Readable + + + + + + + + + + + + + + + + + + + + + + + + + @@ -13,4 +44,4 @@ - \ No newline at end of file + diff --git a/client/public/favicon.ico b/client/public/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..b91e8fb3a174ce901a8e8b3ad50e071ef2f86a31 GIT binary patch literal 2605 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 literal 0 HcmV?d00001 diff --git a/client/public/favicon.svg b/client/public/favicon.svg new file mode 100644 index 0000000..3720eeb --- /dev/null +++ b/client/public/favicon.svg @@ -0,0 +1,10 @@ + + + favicon + + + + + + + \ No newline at end of file From 726e080c344eab095f0f7568dfe13bf63320542d Mon Sep 17 00:00:00 2001 From: Cal Date: Thu, 15 Jan 2026 09:32:52 -0800 Subject: [PATCH 02/17] report clean up --- client/src/components/pdf/PdfActivityCard.tsx | 4 +- client/src/routes/(authenticated)/index.tsx | 4 +- .../(authenticated)/reports/$fileId/index.tsx | 141 +++++++++--------- 3 files changed, 73 insertions(+), 76 deletions(-) diff --git a/client/src/components/pdf/PdfActivityCard.tsx b/client/src/components/pdf/PdfActivityCard.tsx index 1e4f059..a2a8739 100644 --- a/client/src/components/pdf/PdfActivityCard.tsx +++ b/client/src/components/pdf/PdfActivityCard.tsx @@ -96,7 +96,7 @@ export function PdfActivityCard({
- + {file.status} {recentlyCompletedByFileId[file.fileId] ? ( @@ -146,7 +146,7 @@ export function PdfActivityCard({ {typeof fixedIssues === 'number' && fixedIssues > 0 ? ( - Fixed {fixedIssues} + Fixed {fixedIssues} Issues ) : null}
diff --git a/client/src/routes/(authenticated)/index.tsx b/client/src/routes/(authenticated)/index.tsx index 2798e82..807ed4d 100644 --- a/client/src/routes/(authenticated)/index.tsx +++ b/client/src/routes/(authenticated)/index.tsx @@ -54,8 +54,8 @@ function RouteComponent() { return (
-
-

+
+

Readable

PDF Accessibility Conversion Tool

diff --git a/client/src/routes/(authenticated)/reports/$fileId/index.tsx b/client/src/routes/(authenticated)/reports/$fileId/index.tsx index d123d25..d621c2f 100644 --- a/client/src/routes/(authenticated)/reports/$fileId/index.tsx +++ b/client/src/routes/(authenticated)/reports/$fileId/index.tsx @@ -4,7 +4,7 @@ import { type AccessibilityReportDetails, type AccessibilityReportJson, } from '@/queries/files.ts'; -import { ArrowDownTrayIcon } from '@heroicons/react/24/solid'; +import { ArrowDownTrayIcon, ArrowLeftIcon } from '@heroicons/react/24/solid'; import { useQuery } from '@tanstack/react-query'; import { createFileRoute, Link } from '@tanstack/react-router'; import { useMemo } from 'react'; @@ -270,26 +270,47 @@ function RouteComponent() { return (
-
-
-
-

- Accessibility report +
+
+
+ + + Back to Dashboard + +

+ Accessibility report for {file.originalFileName}

-
-
- {file.status} - {file.originalFileName} -
-
- Updated {formatDateTime(file.statusUpdatedAt)} +
+ {file.status} • + Updated {formatDateTime(file.statusUpdatedAt)}
-
-
- - Back - +
+
+ {isCompleted ? ( + + + Download PDF + + ) : ( + + )} +
+ +
{!isCompleted ? ( @@ -331,75 +352,54 @@ function RouteComponent() { ) : null}
-
- {isCompleted ? ( - - - Download PDF - - ) : ( - - )} -
+ {beforeReport && afterReport && beforeCounts && afterCounts ? (
-
+
-
Before
+
Before
{beforeCounts.passed}/{beforeCounts.total}
-
+
{beforeCounts.failed} failed • {beforeCounts.needsManual} needs manual
-
+
Generated {formatDateTime(beforeReport.generatedAt)}
-
After
-
+
After
+
{afterCounts.passed}/{afterCounts.total}
-
+
{afterCounts.failed} failed • {afterCounts.needsManual} needs manual
-
+
Generated {formatDateTime(afterReport.generatedAt)}
-
Improvement
-
+
Improvement
+
{afterCounts.passed - beforeCounts.passed >= 0 ? '+' : ''} {afterCounts.passed - beforeCounts.passed}
-
passed checks
+
passed checks
-
-
-
-

Still failing (After)

+ + + +
+

Still failing (After)

{afterFailed.length === 0 ? (
No failed checks found in the After report. @@ -430,7 +430,7 @@ function RouteComponent() { @@ -443,12 +443,9 @@ function RouteComponent() {
)} -
-
- -
-
-

Needs manual check (After)

+
+ +

Needs manual check (After)

{afterNeedsManual.length === 0 ? (
@@ -468,20 +465,20 @@ function RouteComponent() { {afterNeedsManual.map((r, idx) => ( - + {r.category}
{r.rule}
{r.description ? ( -
+
{r.description}
) : null} @@ -496,7 +493,7 @@ function RouteComponent() { )}
-
+
@@ -511,16 +508,16 @@ function RouteComponent() {
{c.category} {c.afterFailedCount > 0 ? ( - + {c.afterFailedCount} failed ) : ( - + all passed )} {c.afterNeedsManualCount > 0 ? ( - + {c.afterNeedsManualCount} manual ) : null} @@ -549,7 +546,7 @@ function RouteComponent() { {r.beforeStatus ? ( @@ -564,7 +561,7 @@ function RouteComponent() { {r.afterStatus ? ( From 35da42c4cc2fd0faf78ab6ebf40e14997f741e9c Mon Sep 17 00:00:00 2001 From: Cal Date: Thu, 15 Jan 2026 09:35:11 -0800 Subject: [PATCH 03/17] report clean up --- client/src/routes/(authenticated)/reports/$fileId/index.tsx | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/client/src/routes/(authenticated)/reports/$fileId/index.tsx b/client/src/routes/(authenticated)/reports/$fileId/index.tsx index d621c2f..9ec2562 100644 --- a/client/src/routes/(authenticated)/reports/$fileId/index.tsx +++ b/client/src/routes/(authenticated)/reports/$fileId/index.tsx @@ -281,7 +281,7 @@ function RouteComponent() { Accessibility report for {file.originalFileName}

- {file.status} • + {file.status} • Updated {formatDateTime(file.statusUpdatedAt)}
@@ -402,7 +402,7 @@ function RouteComponent() {

Still failing (After)

{afterFailed.length === 0 ? (
- No failed checks found in the After report. + No failed checks found in the After report.
) : (
@@ -448,7 +448,7 @@ function RouteComponent() {

Needs manual check (After)

{afterNeedsManual.length === 0 ? (
- + No “Needs manual check” items found in the After report.
From bc07c5f8f1705d21cbf0ea76574c76da9232f840 Mon Sep 17 00:00:00 2001 From: Cal Date: Thu, 15 Jan 2026 09:41:27 -0800 Subject: [PATCH 04/17] code rabbit changes --- client/index.html | 12 +++++++----- .../routes/(authenticated)/reports/$fileId/index.tsx | 2 +- 2 files changed, 8 insertions(+), 6 deletions(-) diff --git a/client/index.html b/client/index.html index dfe64f4..ec771ec 100644 --- a/client/index.html +++ b/client/index.html @@ -2,10 +2,12 @@ + + Readable @@ -16,7 +18,7 @@ @@ -27,7 +29,7 @@ @@ -36,10 +38,10 @@ - + - +
diff --git a/client/src/routes/(authenticated)/reports/$fileId/index.tsx b/client/src/routes/(authenticated)/reports/$fileId/index.tsx index 9ec2562..bbf11d4 100644 --- a/client/src/routes/(authenticated)/reports/$fileId/index.tsx +++ b/client/src/routes/(authenticated)/reports/$fileId/index.tsx @@ -359,7 +359,7 @@ function RouteComponent() {
Before
-
+
{beforeCounts.passed}/{beforeCounts.total}
From 1a25c47c2bb55d385c491174d506bf50f2f7821f Mon Sep 17 00:00:00 2001 From: Cal Date: Thu, 15 Jan 2026 14:28:01 -0800 Subject: [PATCH 05/17] faq --- client/src/routeTree.gen.ts | 34 +-- client/src/routes/(authenticated)/index.tsx | 28 +- .../(authenticated)/reports/$fileId/index.tsx | 260 +++++++++--------- client/src/routes/{about.tsx => FAQs.tsx} | 6 +- client/src/routes/__root.tsx | 20 +- 5 files changed, 183 insertions(+), 165 deletions(-) rename client/src/routes/{about.tsx => FAQs.tsx} (95%) diff --git a/client/src/routeTree.gen.ts b/client/src/routeTree.gen.ts index cfb4fb9..758a2b7 100644 --- a/client/src/routeTree.gen.ts +++ b/client/src/routeTree.gen.ts @@ -9,14 +9,14 @@ // Additionally, you should also exclude this file from your linter and/or formatter to prevent it from being checked or modified. import { Route as rootRouteImport } from './routes/__root' -import { Route as AboutRouteImport } from './routes/about' +import { Route as FAQsRouteImport } from './routes/FAQs' import { Route as authenticatedRouteRouteImport } from './routes/(authenticated)/route' import { Route as authenticatedIndexRouteImport } from './routes/(authenticated)/index' import { Route as authenticatedReportsFileIdIndexRouteImport } from './routes/(authenticated)/reports/$fileId/index' -const AboutRoute = AboutRouteImport.update({ - id: '/about', - path: '/about', +const FAQsRoute = FAQsRouteImport.update({ + id: '/FAQs', + path: '/FAQs', getParentRoute: () => rootRouteImport, } as any) const authenticatedRouteRoute = authenticatedRouteRouteImport.update({ @@ -36,47 +36,47 @@ const authenticatedReportsFileIdIndexRoute = } as any) export interface FileRoutesByFullPath { - '/about': typeof AboutRoute + '/FAQs': typeof FAQsRoute '/': typeof authenticatedIndexRoute '/reports/$fileId': typeof authenticatedReportsFileIdIndexRoute } export interface FileRoutesByTo { - '/about': typeof AboutRoute + '/FAQs': typeof FAQsRoute '/': typeof authenticatedIndexRoute '/reports/$fileId': typeof authenticatedReportsFileIdIndexRoute } export interface FileRoutesById { __root__: typeof rootRouteImport '/(authenticated)': typeof authenticatedRouteRouteWithChildren - '/about': typeof AboutRoute + '/FAQs': typeof FAQsRoute '/(authenticated)/': typeof authenticatedIndexRoute '/(authenticated)/reports/$fileId/': typeof authenticatedReportsFileIdIndexRoute } export interface FileRouteTypes { fileRoutesByFullPath: FileRoutesByFullPath - fullPaths: '/about' | '/' | '/reports/$fileId' + fullPaths: '/FAQs' | '/' | '/reports/$fileId' fileRoutesByTo: FileRoutesByTo - to: '/about' | '/' | '/reports/$fileId' + to: '/FAQs' | '/' | '/reports/$fileId' id: | '__root__' | '/(authenticated)' - | '/about' + | '/FAQs' | '/(authenticated)/' | '/(authenticated)/reports/$fileId/' fileRoutesById: FileRoutesById } export interface RootRouteChildren { authenticatedRouteRoute: typeof authenticatedRouteRouteWithChildren - AboutRoute: typeof AboutRoute + FAQsRoute: typeof FAQsRoute } declare module '@tanstack/react-router' { interface FileRoutesByPath { - '/about': { - id: '/about' - path: '/about' - fullPath: '/about' - preLoaderRoute: typeof AboutRouteImport + '/FAQs': { + id: '/FAQs' + path: '/FAQs' + fullPath: '/FAQs' + preLoaderRoute: typeof FAQsRouteImport parentRoute: typeof rootRouteImport } '/(authenticated)': { @@ -118,7 +118,7 @@ const authenticatedRouteRouteWithChildren = const rootRouteChildren: RootRouteChildren = { authenticatedRouteRoute: authenticatedRouteRouteWithChildren, - AboutRoute: AboutRoute, + FAQsRoute: FAQsRoute, } export const routeTree = rootRouteImport ._addFileChildren(rootRouteChildren) diff --git a/client/src/routes/(authenticated)/index.tsx b/client/src/routes/(authenticated)/index.tsx index 807ed4d..c05dd53 100644 --- a/client/src/routes/(authenticated)/index.tsx +++ b/client/src/routes/(authenticated)/index.tsx @@ -7,6 +7,7 @@ import { myFilesQueryOptions } from '@/queries/files.ts'; import { useQuery } from '@tanstack/react-query'; import { createFileRoute } from '@tanstack/react-router'; import { useCallback, useEffect } from 'react'; +import { Link } from '@tanstack/react-router'; export const Route = createFileRoute('/(authenticated)/')({ component: RouteComponent, @@ -54,14 +55,25 @@ function RouteComponent() { return (
-
-

- Readable -

-

PDF Accessibility Conversion Tool

-
- - {/* Upload Dropzone */} +
+

Make Your PDFs Accessible

+

+ Readable helps you meet modern accessibility requirements by + transforming standard PDFs into documents that are more compliant with{' '} + + WCAG and PDF/UA guidelines + + . +

+ + More Info + +
-
+
- - - Back to Dashboard -

Accessibility report for {file.originalFileName}

-
- {file.status} • - Updated {formatDateTime(file.statusUpdatedAt)} -
- +
+ + {file.status} + {' '} + • Updated {formatDateTime(file.statusUpdatedAt)} +
+
+
+
+ {isCompleted ? ( + + + Download PDF + + ) : ( + + )} +
-
- {isCompleted ? ( - - - Download PDF - - ) : ( - - )} -
- -
{!isCompleted ? ( @@ -352,8 +349,6 @@ function RouteComponent() { ) : null}
- - {beforeReport && afterReport && beforeCounts && afterCounts ? (
@@ -395,105 +390,98 @@ function RouteComponent() {
- - - -
-

Still failing (After)

- {afterFailed.length === 0 ? ( -
- No failed checks found in the After report. -
- ) : ( -
- - - - - - - - - - {afterFailed.map((r, idx) => ( - - - - - - ))} - -
CategoryRuleStatus
- {r.category} - -
{r.rule}
- {r.description ? ( -
- {r.description} -
- ) : null} -
- - {r.status} - -
-
- )} -
- -

Needs manual check (After)

- {afterNeedsManual.length === 0 ? ( -
- - No “Needs manual check” items found in the After report. - -
- ) : ( -
- - - - - - - - - - {afterNeedsManual.map((r, idx) => ( - - - - - - ))} - -
CategoryRuleStatus
- {r.category} - -
{r.rule}
- {r.description ? ( -
- {r.description} -
- ) : null} -
- - {r.status} - -
-
- )} +
+

Still failing (After)

+ {afterFailed.length === 0 ? ( +
+ + No failed checks found in the After report. + +
+ ) : ( +
+ + + + + + + + + + {afterFailed.map((r, idx) => ( + + + + + + ))} + +
CategoryRuleStatus
{r.category} +
{r.rule}
+ {r.description ? ( +
+ {r.description} +
+ ) : null} +
+ + {r.status} + +
+ )} +
+

Needs manual check

+ {afterNeedsManual.length === 0 ? ( +
+ + No “Needs manual check” items found in the After report. + +
+ ) : ( +
+ + + + + + + + + + {afterNeedsManual.map((r, idx) => ( + + + + + + ))} + +
CategoryRuleStatus
{r.category} +
{r.rule}
+ {r.description ? ( +
+ {r.description} +
+ ) : null} +
+ + {r.status} + +
+
+ )}
- +
diff --git a/client/src/routes/about.tsx b/client/src/routes/FAQs.tsx similarity index 95% rename from client/src/routes/about.tsx rename to client/src/routes/FAQs.tsx index ff9bd01..4d1d800 100644 --- a/client/src/routes/about.tsx +++ b/client/src/routes/FAQs.tsx @@ -1,10 +1,10 @@ import { createFileRoute, Link } from '@tanstack/react-router'; -export const Route = createFileRoute('/about')({ - component: About, +export const Route = createFileRoute('/FAQs')({ + component: FAQs, }); -function About() { +function FAQs() { return (
{/* Homepage Link */} diff --git a/client/src/routes/__root.tsx b/client/src/routes/__root.tsx index 90f881e..aef970e 100644 --- a/client/src/routes/__root.tsx +++ b/client/src/routes/__root.tsx @@ -1,4 +1,8 @@ -import { createRootRouteWithContext, Outlet } from '@tanstack/react-router'; +import { + createRootRouteWithContext, + Link, + Outlet, +} from '@tanstack/react-router'; import { ReactQueryDevtools } from '@tanstack/react-query-devtools'; import { TanStackRouterDevtools } from '@tanstack/react-router-devtools'; import { RouterContext } from '../main.tsx'; @@ -7,6 +11,20 @@ import Footer from '@/components/pdf/Footer.tsx'; const RootLayout = () => (
+
+
+ +

Readable

+

+ PDF Accessibility Conversion Tool +

+ + FAQs +
+
From f7ab910d3c61997aa2d6df1e5db10bdd775b4eb9 Mon Sep 17 00:00:00 2001 From: Cal Date: Thu, 15 Jan 2026 14:39:02 -0800 Subject: [PATCH 06/17] UCD blue and gold --- client/index.html | 22 ++++++++----------- client/src/main.css | 11 +++++----- client/src/routes/(authenticated)/index.tsx | 2 +- .../(authenticated)/reports/$fileId/index.tsx | 14 ++++++------ 4 files changed, 22 insertions(+), 27 deletions(-) diff --git a/client/index.html b/client/index.html index ec771ec..bc8ae04 100644 --- a/client/index.html +++ b/client/index.html @@ -1,10 +1,9 @@ - - - - - Readable + + + + Readable + - - - - -
- - - + +
+ + diff --git a/client/src/main.css b/client/src/main.css index 5399189..9d2c821 100644 --- a/client/src/main.css +++ b/client/src/main.css @@ -10,17 +10,17 @@ --font-proxima-bold: 'proxima-nova-b', sans-serif; - --color-primary-color: var(--color-ucd-gunrock); - --color-secondary-color: var(--color-ucd-goldenstate); - --color-accent-color: var(--color-ucd-goldenstate); - --color-error-color: var(--color-ucd-doubledecker); + --color-primary-color: #022851; + --color-secondary-color: #ffbf00; + --color-accent-color: var(--color-ucd-sunflower); + --color-error-color: var(--color-ucd-strawberry); --color-info-color: var(--color-ucd-arboretum); --color-success-color: var(--color-ucd-sage); --color-warning-color: var(--color-ucd-poppy); } @plugin "daisyui/theme" { - name: 'walter'; + name: 'readable'; --color-base-100: var(--color-light-bg-100); --color-base-200: var(--color-light-bg-200); --color-base-300: var(--color-light-bg-300); @@ -28,7 +28,6 @@ --color-primary: var(--color-primary-color); --color-primary-content: var(--color-light-font); - --color-secondary: var(--color-secondary-color); --color-accent: var(--color-accent-color); --color-error: var(--color-error-color); diff --git a/client/src/routes/(authenticated)/index.tsx b/client/src/routes/(authenticated)/index.tsx index c05dd53..98fade3 100644 --- a/client/src/routes/(authenticated)/index.tsx +++ b/client/src/routes/(authenticated)/index.tsx @@ -70,7 +70,7 @@ function RouteComponent() { .

- + More Info
diff --git a/client/src/routes/(authenticated)/reports/$fileId/index.tsx b/client/src/routes/(authenticated)/reports/$fileId/index.tsx index dcd074c..10a104c 100644 --- a/client/src/routes/(authenticated)/reports/$fileId/index.tsx +++ b/client/src/routes/(authenticated)/reports/$fileId/index.tsx @@ -400,7 +400,7 @@ function RouteComponent() {
) : (
- +
@@ -411,11 +411,11 @@ function RouteComponent() { {afterFailed.map((r, idx) => ( - + +
Category
{r.category}{r.category}
{r.rule}
{r.description ? ( -
+
{r.description}
) : null} @@ -445,7 +445,7 @@ function RouteComponent() {
) : (
- +
@@ -512,7 +512,7 @@ function RouteComponent() {
-
Category
+
@@ -526,7 +526,7 @@ function RouteComponent() {
Rule
{r.rule}
{r.description ? ( -
+
{r.description}
) : null} @@ -541,7 +541,7 @@ function RouteComponent() { {r.beforeStatus} ) : ( - + )} From 6d538128a6c6fd6f71062ea572938422cf567e1a Mon Sep 17 00:00:00 2001 From: Cal Date: Thu, 15 Jan 2026 14:49:04 -0800 Subject: [PATCH 07/17] table reorg --- client/src/main.css | 7 +- .../(authenticated)/reports/$fileId/index.tsx | 161 +++++++++--------- 2 files changed, 83 insertions(+), 85 deletions(-) diff --git a/client/src/main.css b/client/src/main.css index 9d2c821..cd707dd 100644 --- a/client/src/main.css +++ b/client/src/main.css @@ -13,9 +13,9 @@ --color-primary-color: #022851; --color-secondary-color: #ffbf00; --color-accent-color: var(--color-ucd-sunflower); - --color-error-color: var(--color-ucd-strawberry); + --color-error-color: var(--color-ucd-doubledecker); --color-info-color: var(--color-ucd-arboretum); - --color-success-color: var(--color-ucd-sage); + --color-success-color: var(--color-ucd-quad); --color-warning-color: var(--color-ucd-poppy); } @@ -33,10 +33,9 @@ --color-error: var(--color-error-color); --color-info: var(--color-info-color); --color-success: var(--color-success-color); + --color-success-content: var(--color-light-font); --color-warning: var(--color-warning-color); } -@layer base { -} .container { padding: 0; diff --git a/client/src/routes/(authenticated)/reports/$fileId/index.tsx b/client/src/routes/(authenticated)/reports/$fileId/index.tsx index 10a104c..d6e1429 100644 --- a/client/src/routes/(authenticated)/reports/$fileId/index.tsx +++ b/client/src/routes/(authenticated)/reports/$fileId/index.tsx @@ -486,90 +486,89 @@ function RouteComponent() {

Before vs After breakdown

-
- {compareByCategory.map((c) => ( -
- -
- {c.category} - {c.afterFailedCount > 0 ? ( - - {c.afterFailedCount} failed - - ) : ( - - all passed - - )} - {c.afterNeedsManualCount > 0 ? ( - - {c.afterNeedsManualCount} manual - - ) : null} -
-
-
- - - - - - + + {compareByCategory.map((c) => ( +
+ +
+ {c.category} + {c.afterFailedCount > 0 ? ( + + {c.afterFailedCount} failed + + ) : ( + + all passed + + )} + {c.afterNeedsManualCount > 0 ? ( + + {c.afterNeedsManualCount} manual + + ) : null} +
+
+
+
RuleBeforeAfter
+ + + + + + + + + {c.rows.map((r) => ( + + + + - - - {c.rows.map((r) => ( - - - - - - ))} - -
RuleBeforeAfter
+
{r.rule}
+ {r.description ? ( +
+ {r.description} +
+ ) : null} +
+ {r.beforeStatus ? ( + + {r.beforeStatus} + + ) : ( + + — + + )} + + {r.afterStatus ? ( + + {r.afterStatus} + + ) : ( + + — + + )} +
-
{r.rule}
- {r.description ? ( -
- {r.description} -
- ) : null} -
- {r.beforeStatus ? ( - - {r.beforeStatus} - - ) : ( - - — - - )} - - {r.afterStatus ? ( - - {r.afterStatus} - - ) : ( - - — - - )} -
-
+ ))} + +
- ))} - + + ))} From 0f36951f370d1fe5df63ac78d759a8dbf94f4f33 Mon Sep 17 00:00:00 2001 From: Cal Date: Thu, 15 Jan 2026 15:17:23 -0800 Subject: [PATCH 08/17] faq tempalte --- client/src/routes/(authenticated)/index.tsx | 2 +- .../(authenticated)/reports/$fileId/index.tsx | 22 +- client/src/routes/FAQs.tsx | 219 ++++++++++++++---- client/src/routes/__root.tsx | 2 +- 4 files changed, 188 insertions(+), 57 deletions(-) diff --git a/client/src/routes/(authenticated)/index.tsx b/client/src/routes/(authenticated)/index.tsx index 98fade3..823fcdb 100644 --- a/client/src/routes/(authenticated)/index.tsx +++ b/client/src/routes/(authenticated)/index.tsx @@ -70,7 +70,7 @@ function RouteComponent() { .

- + More Info diff --git a/client/src/routes/(authenticated)/reports/$fileId/index.tsx b/client/src/routes/(authenticated)/reports/$fileId/index.tsx index d6e1429..d23629a 100644 --- a/client/src/routes/(authenticated)/reports/$fileId/index.tsx +++ b/client/src/routes/(authenticated)/reports/$fileId/index.tsx @@ -351,7 +351,7 @@ function RouteComponent() { {beforeReport && afterReport && beforeCounts && afterCounts ? (
-
+
Before
@@ -367,6 +367,15 @@ function RouteComponent() {
+
Changed
+
+ {afterCounts.passed - beforeCounts.passed >= 0 ? '+' : ''} + {afterCounts.passed - beforeCounts.passed} +
+
passed checks
+
+ +
After
{afterCounts.passed}/{afterCounts.total} @@ -379,15 +388,6 @@ function RouteComponent() { Generated {formatDateTime(afterReport.generatedAt)}
- -
-
Improvement
-
- {afterCounts.passed - beforeCounts.passed >= 0 ? '+' : ''} - {afterCounts.passed - beforeCounts.passed} -
-
passed checks
-
@@ -483,7 +483,7 @@ function RouteComponent() {
-
+

Before vs After breakdown

diff --git a/client/src/routes/FAQs.tsx b/client/src/routes/FAQs.tsx index 4d1d800..5d2a358 100644 --- a/client/src/routes/FAQs.tsx +++ b/client/src/routes/FAQs.tsx @@ -1,4 +1,4 @@ -import { createFileRoute, Link } from '@tanstack/react-router'; +import { createFileRoute } from '@tanstack/react-router'; export const Route = createFileRoute('/FAQs')({ component: FAQs, @@ -6,55 +6,186 @@ export const Route = createFileRoute('/FAQs')({ function FAQs() { return ( -
- {/* Homepage Link */} -
- - - - - Home - -
+
+
+

+ Most PDFs are visually readable but structurally inaccessible. They + lack proper headings, document structure, reading order, and + descriptive text for images and links—features required by + accessibility regulations and essential for screen readers and + assistive technologies. +

- {/* Floating Elements */} -
-
-
-
+

+ Readable automatically analyzes your PDF and: +

+ +
    +
  • Detects and adds document structure and hierarchy
  • +
  • Identifies headings, lists, tables, and reading order
  • +
  • + Generates clear, context-aware descriptions for images and links + using AI +
  • +
  • Flags remaining accessibility issues in a detailed report
  • +
+ +

+ The result is a PDF that is dramatically closer to full accessibility + compliance—saving time, reducing manual remediation effort, and + helping ensure your documents are usable by everyone. +

+ +
- {/* Main Content */} -
-
- {/* Hero Section */} -
-

- 🚀 About Us -

-

- UC Davis is the place to be for cutting-edge web development. +

+

+ About Readable +

+ +
+

+ Why Accessibility Matters +

+ +

+ Accessibility regulations such as WCAG, Section 508, and PDF/UA + require digital documents to be usable by people with + disabilities. While many PDFs look correct visually, most fail + accessibility checks because they lack: +

+ +
    +
  • Semantic structure (headings, sections, lists)
  • +
  • Logical reading order
  • +
  • Text alternatives for images and graphics
  • +
  • Meaningful descriptions for links and interactive content
  • +
+ +

+ Without these elements, screen readers cannot interpret the + document correctly—making it inaccessible to many users.

-
-
- {/* Footer */} -
-
-

Made with ❤️ at UC Davis

+
+ +
+

+ How Readable Works +

+ +

+ Readable bridges the gap between visually correct PDFs and truly + accessible documents. When you upload a PDF, Readable + automatically: +

+ +
    +
  1. +
    + Analyzes the document structure +
    +

    + It detects headings, paragraphs, lists, tables, and layout + patterns to establish a logical hierarchy and reading order. +

    +
  2. + +
  3. +
    + Adds accessibility metadata +
    +

    + The PDF is enhanced with structural tags, titles, and + navigation elements required by accessibility standards. +

    +
  4. + +
  5. +
    + Generates intelligent descriptions using AI +
    +

    + Readable uses AI to create useful, context-aware descriptions + for: +

    +
      +
    • Images and figures
    • +
    • Links and references
    • +
    • Complex content blocks
    • +
    +

    + These descriptions are designed to be helpful—not generic—so + assistive technology users get meaningful information. +

    +
  6. + +
  7. +
    + Produces an accessibility report +
    +

    + After processing, Readable provides a report highlighting: +

    +
      +
    • What was automatically fixed
    • +
    • Remaining issues that may require manual review
    • +
    • + Recommendations for achieving higher compliance levels +
    • +
    +
  8. +
+
+ +
+ +
+

+ What You Get +

+ +
    +
  • Significantly improved WCAG and PDF/UA compliance
  • +
  • Dramatically reduced remediation time
  • +
  • Clear visibility into remaining accessibility gaps
  • +
  • A practical balance of automation and human review
  • +
+ +

+ Readable doesn’t claim to replace human judgment entirely—but it + does eliminate the most time-consuming and technical parts of PDF + accessibility work. +

+
+ +
+ +
+

+ Who Readable Is For +

+ +

Readable is designed for:

+ +
    +
  • Universities and research institutions
  • +
  • Government and public-sector organizations
  • +
  • Companies publishing reports, manuals, or forms
  • +
  • + Teams responsible for compliance, accessibility, or digital + content +
  • +
+ +

+ If you produce PDFs, Readable helps ensure they’re usable by + everyone. +

+
-
+
); } diff --git a/client/src/routes/__root.tsx b/client/src/routes/__root.tsx index aef970e..f1713fc 100644 --- a/client/src/routes/__root.tsx +++ b/client/src/routes/__root.tsx @@ -12,7 +12,7 @@ const RootLayout = () => (
-
+
Date: Thu, 15 Jan 2026 15:28:56 -0800 Subject: [PATCH 09/17] new favicon color --- client/public/favicon.ico | Bin 2605 -> 2621 bytes client/public/favicon.svg | 2 +- client/src/routes/__root.tsx | 2 +- 3 files changed, 2 insertions(+), 2 deletions(-) diff --git a/client/public/favicon.ico b/client/public/favicon.ico index b91e8fb3a174ce901a8e8b3ad50e071ef2f86a31..7795e88b186588cd91ea619e1344b9e566a1fc5d 100644 GIT binary patch literal 2621 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 Gk@7FE$A0wy delta 2502 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 Vi(~k^a3l^mlf4ZV^U?~R@*lN3XMq3! diff --git a/client/public/favicon.svg b/client/public/favicon.svg index 3720eeb..d272870 100644 --- a/client/public/favicon.svg +++ b/client/public/favicon.svg @@ -2,7 +2,7 @@ favicon - + diff --git a/client/src/routes/__root.tsx b/client/src/routes/__root.tsx index f1713fc..a8171c8 100644 --- a/client/src/routes/__root.tsx +++ b/client/src/routes/__root.tsx @@ -11,7 +11,7 @@ import Footer from '@/components/pdf/Footer.tsx'; const RootLayout = () => (
-
+
Date: Fri, 16 Jan 2026 08:43:17 -0800 Subject: [PATCH 10/17] full bg --- client/index.html | 2 +- client/src/routes/__root.tsx | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/client/index.html b/client/index.html index bc8ae04..4f6799d 100644 --- a/client/index.html +++ b/client/index.html @@ -1,5 +1,5 @@ - + diff --git a/client/src/routes/__root.tsx b/client/src/routes/__root.tsx index a8171c8..f524fc7 100644 --- a/client/src/routes/__root.tsx +++ b/client/src/routes/__root.tsx @@ -9,7 +9,7 @@ import { RouterContext } from '../main.tsx'; import Footer from '@/components/pdf/Footer.tsx'; const RootLayout = () => ( -
+
From 8d0004ed44988d54f4d3cf78e1fc88cd27cbe179 Mon Sep 17 00:00:00 2001 From: Cal Date: Fri, 16 Jan 2026 09:34:35 -0800 Subject: [PATCH 11/17] code rabbit --- client/index.html | 10 ++++++++-- client/src/routes/FAQs.tsx | 1 + 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/client/index.html b/client/index.html index 4f6799d..8465bf0 100644 --- a/client/index.html +++ b/client/index.html @@ -19,7 +19,10 @@ property="og:description" content="Readable is a PDF accessibility conversion tool built by CRU at CA&ES UC Davis." /> - + @@ -30,7 +33,10 @@ name="twitter:description" content="Readable is a PDF accessibility conversion tool built by CRU at CA&ES UC Davis." /> - + diff --git a/client/src/routes/FAQs.tsx b/client/src/routes/FAQs.tsx index 5d2a358..3510274 100644 --- a/client/src/routes/FAQs.tsx +++ b/client/src/routes/FAQs.tsx @@ -8,6 +8,7 @@ function FAQs() { return (
+

FAQ placeholder

Most PDFs are visually readable but structurally inaccessible. They lack proper headings, document structure, reading order, and From 6db796ab2037eb1f89b20005e28d3ae91cab334e Mon Sep 17 00:00:00 2001 From: Cal Date: Fri, 16 Jan 2026 10:29:27 -0800 Subject: [PATCH 12/17] Revert "full bg" This reverts commit a374565df8f827aa8e2f68dda0975dd8bf6b44be. --- client/index.html | 2 +- client/src/routes/__root.tsx | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/client/index.html b/client/index.html index 8465bf0..88b6f29 100644 --- a/client/index.html +++ b/client/index.html @@ -1,5 +1,5 @@ - + diff --git a/client/src/routes/__root.tsx b/client/src/routes/__root.tsx index f524fc7..a8171c8 100644 --- a/client/src/routes/__root.tsx +++ b/client/src/routes/__root.tsx @@ -9,7 +9,7 @@ import { RouterContext } from '../main.tsx'; import Footer from '@/components/pdf/Footer.tsx'; const RootLayout = () => ( -

+
From 7cb3cf292cf3653c10e483629ed1f6ff3527c1d3 Mon Sep 17 00:00:00 2001 From: Cal Date: Fri, 16 Jan 2026 10:34:28 -0800 Subject: [PATCH 13/17] darker tones --- client/src/main.css | 10 +++++++--- .../routes/(authenticated)/reports/$fileId/index.tsx | 6 +++--- 2 files changed, 10 insertions(+), 6 deletions(-) diff --git a/client/src/main.css b/client/src/main.css index cd707dd..516e567 100644 --- a/client/src/main.css +++ b/client/src/main.css @@ -13,10 +13,10 @@ --color-primary-color: #022851; --color-secondary-color: #ffbf00; --color-accent-color: var(--color-ucd-sunflower); - --color-error-color: var(--color-ucd-doubledecker); + --color-error-color: var(--color-ucd-merlot); --color-info-color: var(--color-ucd-arboretum); - --color-success-color: var(--color-ucd-quad); - --color-warning-color: var(--color-ucd-poppy); + --color-success-color: var(--color-ucd-redwood); + --color-warning-color: var(--color-ucd-california); } @plugin "daisyui/theme" { @@ -37,6 +37,10 @@ --color-warning: var(--color-warning-color); } +html { + background-color: var(--color-light-bg-200); +} + .container { padding: 0; width: 85%; diff --git a/client/src/routes/(authenticated)/reports/$fileId/index.tsx b/client/src/routes/(authenticated)/reports/$fileId/index.tsx index d23629a..bc274f6 100644 --- a/client/src/routes/(authenticated)/reports/$fileId/index.tsx +++ b/client/src/routes/(authenticated)/reports/$fileId/index.tsx @@ -351,7 +351,7 @@ function RouteComponent() { {beforeReport && afterReport && beforeCounts && afterCounts ? (
-
+
Before
@@ -390,7 +390,7 @@ function RouteComponent() {
-
+

Still failing (After)

{afterFailed.length === 0 ? (
@@ -483,7 +483,7 @@ function RouteComponent() {
-
+

Before vs After breakdown

From 68c2460cc24e9401e8bfcc31dde80e4bb1b6ab16 Mon Sep 17 00:00:00 2001 From: Cal Date: Fri, 16 Jan 2026 11:09:37 -0800 Subject: [PATCH 14/17] aligned tables and color fixes --- client/src/main.css | 5 +- .../(authenticated)/reports/$fileId/index.tsx | 99 ++++++++++--------- 2 files changed, 58 insertions(+), 46 deletions(-) diff --git a/client/src/main.css b/client/src/main.css index 516e567..315afd0 100644 --- a/client/src/main.css +++ b/client/src/main.css @@ -14,7 +14,7 @@ --color-secondary-color: #ffbf00; --color-accent-color: var(--color-ucd-sunflower); --color-error-color: var(--color-ucd-merlot); - --color-info-color: var(--color-ucd-arboretum); + --color-info-color: var(--color-ucd-bodega); --color-success-color: var(--color-ucd-redwood); --color-warning-color: var(--color-ucd-california); } @@ -31,10 +31,13 @@ --color-secondary: var(--color-secondary-color); --color-accent: var(--color-accent-color); --color-error: var(--color-error-color); + --color-error-content: var(--color-light-font); --color-info: var(--color-info-color); + --color-info-content: var(--color-light-font); --color-success: var(--color-success-color); --color-success-content: var(--color-light-font); --color-warning: var(--color-warning-color); + --color-warning-content: var(--color-light-font); } html { diff --git a/client/src/routes/(authenticated)/reports/$fileId/index.tsx b/client/src/routes/(authenticated)/reports/$fileId/index.tsx index bc274f6..2ffa49d 100644 --- a/client/src/routes/(authenticated)/reports/$fileId/index.tsx +++ b/client/src/routes/(authenticated)/reports/$fileId/index.tsx @@ -401,6 +401,11 @@ function RouteComponent() { ) : (
+ + + + + @@ -435,52 +440,56 @@ function RouteComponent() {
Category
)} -
-

Needs manual check

- {afterNeedsManual.length === 0 ? ( -
- - No “Needs manual check” items found in the After report. - -
- ) : ( -
- - - - - - + +

Needs manual check

+ {afterNeedsManual.length === 0 ? ( +
+ + No “Needs manual check” items found in the After report. + +
+ ) : ( +
+
CategoryRuleStatus
+ + + + + + + + + + + + + + {afterNeedsManual.map((r, idx) => ( + + + + - - - {afterNeedsManual.map((r, idx) => ( - - - - - - ))} - -
CategoryRuleStatus
{r.category} +
{r.rule}
+ {r.description ? ( +
+ {r.description} +
+ ) : null} +
+ + {r.status} + +
{r.category} -
{r.rule}
- {r.description ? ( -
- {r.description} -
- ) : null} -
- - {r.status} - -
-
- )} -
+ ))} +
+
+ )}
From 17db03bf128d2256408ee95d124ac11c3baab117 Mon Sep 17 00:00:00 2001 From: Cal Date: Fri, 16 Jan 2026 11:24:00 -0800 Subject: [PATCH 15/17] no soft badges --- .../(authenticated)/reports/$fileId/index.tsx | 20 +++++++++---------- 1 file changed, 9 insertions(+), 11 deletions(-) diff --git a/client/src/routes/(authenticated)/reports/$fileId/index.tsx b/client/src/routes/(authenticated)/reports/$fileId/index.tsx index 2ffa49d..e90b34f 100644 --- a/client/src/routes/(authenticated)/reports/$fileId/index.tsx +++ b/client/src/routes/(authenticated)/reports/$fileId/index.tsx @@ -277,10 +277,8 @@ function RouteComponent() { Accessibility report for {file.originalFileName}

- - {file.status} - {' '} - • Updated {formatDateTime(file.statusUpdatedAt)} + {file.status} • + Updated {formatDateTime(file.statusUpdatedAt)}
@@ -427,7 +425,7 @@ function RouteComponent() { @@ -477,7 +475,7 @@ function RouteComponent() { @@ -505,16 +503,16 @@ function RouteComponent() {
{c.category} {c.afterFailedCount > 0 ? ( - + {c.afterFailedCount} failed ) : ( - + all passed )} {c.afterNeedsManualCount > 0 ? ( - + {c.afterNeedsManualCount} manual ) : null} @@ -543,7 +541,7 @@ function RouteComponent() { {r.beforeStatus ? ( @@ -558,7 +556,7 @@ function RouteComponent() { {r.afterStatus ? ( From 3e7b80802825a29d3e3cd8997baa5988528aba60 Mon Sep 17 00:00:00 2001 From: Cal Date: Fri, 16 Jan 2026 11:31:12 -0800 Subject: [PATCH 16/17] unneeded space --- client/src/routes/(authenticated)/reports/$fileId/index.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/client/src/routes/(authenticated)/reports/$fileId/index.tsx b/client/src/routes/(authenticated)/reports/$fileId/index.tsx index e90b34f..b0d3cdb 100644 --- a/client/src/routes/(authenticated)/reports/$fileId/index.tsx +++ b/client/src/routes/(authenticated)/reports/$fileId/index.tsx @@ -425,7 +425,7 @@ function RouteComponent() { From 3da64087f3f3fb481e5b1d426c618023df940841 Mon Sep 17 00:00:00 2001 From: Scott Kirkland Date: Fri, 16 Jan 2026 13:25:44 -0800 Subject: [PATCH 17/17] Enhances link security for outbound links Adds `noopener` to the `rel` attribute of the download link. This enhances security by preventing the linked page from potentially manipulating the originating page. --- client/src/routes/(authenticated)/reports/$fileId/index.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/client/src/routes/(authenticated)/reports/$fileId/index.tsx b/client/src/routes/(authenticated)/reports/$fileId/index.tsx index b0d3cdb..5024dc4 100644 --- a/client/src/routes/(authenticated)/reports/$fileId/index.tsx +++ b/client/src/routes/(authenticated)/reports/$fileId/index.tsx @@ -287,7 +287,7 @@ function RouteComponent() {