mirror of
https://github.com/Such-Software/such.software.git
synced 2026-10-17 05:32:05 +02:00
e1ea0ce18c444b81e55f771caa017af6e221f42e
next lint to the ESLint CLI and flat config
`next lint` is deprecated and disappears in Next 16. apps/web now runs `eslint .` against eslint.config.mjs on ESLint 9, and the shared preset moves to packages/config/eslint-preset.mjs. eslint-config-next 15 still ships only an eslintrc-style config, so FlatCompat translates it; that keeps next/core-web-vitals as the single source of rules. The migration was done by hand rather than via @next/codemod, because the codemod does not know about the shared @repo/config preset. Two things worth knowing. ESLint 9 only walks file extensions that some config names in `files`. The first working version of this config linted three loose .js files, skipped every .tsx in src/, and still exited 0 -- a green run that checked nothing. The preset now names the extensions explicitly. Coverage went from 3 files to 82, and a deliberately broken canary component confirms rules still fire. `@eslint/eslintrc` also needed a second scoped override: it does a default import of minimatch and declares ^3.1.2, which the global ^9.0.7 audit override broke. Same shape as the ajv fix in the previous commit.
Such Software Website
Corporate website for Such Software LLC, a full-service software provider based in Kennett Square, PA.
Lighthouse Scores
| Page | Performance | Accessibility | SEO | Best Practices |
|---|---|---|---|---|
| Home | 99% | 100% | 100% | 77%* |
| Services | 98% | 100% | 100% | 100% |
| About | 99% | 100% | 100% | 100% |
*Home page Best Practices is 77% due to Cloudflare Turnstile third-party cookies.
Tech Stack
- Next.js 15 with App Router
- React 18 + TypeScript 5
- Tailwind CSS 3 + Framer Motion 11
- Radix UI accessible primitives
- next-themes for dark/light mode
- Zod for validation
- Cloudflare Turnstile for bot protection
- Turborepo + pnpm 9
Project Structure
such-software-site/
├── apps/web/ # Next.js website
│ ├── src/app/ # Pages (home, services, about)
│ ├── src/components/ # React components
│ ├── tests/ # Playwright a11y tests
│ └── public/ # Static assets
├── packages/ui/ # Shared UI components
└── packages/config/ # Shared config
Development
pnpm install # Install dependencies
pnpm dev # Start dev server at localhost:3000
pnpm build # Production build
pnpm start # Start production server
Testing
cd apps/web
pnpm test:a11y # Run Playwright accessibility tests
pnpm test:ui # Run tests with interactive UI
42 accessibility tests across Chromium, Firefox, and WebKit covering WCAG 2.2 AA criteria, heading hierarchy, color contrast, and keyboard navigation.
Accessibility
- WCAG 2.2 AA: engineered to meet, audited against (Lighthouse measured 100%)
- Skip-to-main link, semantic HTML5, ARIA labels
- Proper heading hierarchy, color contrast (4.5:1+)
prefers-reduced-motionsupport- Keyboard navigation, focus indicators
- Structured data (JSON-LD) and canonical URLs
Environment Variables
Create apps/web/.env.local:
NEXT_PUBLIC_TURNSTILE_SITE_KEY=your_site_key
TURNSTILE_SECRET_KEY=your_secret_key
See apps/web/.env.example for template.
License
Proprietary - Such Software LLC
Languages
TypeScript
81%
MDX
15.3%
CSS
2.8%
JavaScript
0.9%