feat: migrate from React to Preact, add Vitest testing, and optimize bundle

Major framework and tooling changes:
- Migrate from React 19 to Preact 10 with preact-iso for routing
- Replace @mantine/hooks with custom hooks (useBooleanToggle, useViewportSize)
- Switch from @heroicons/react to lucide-preact for icons
- Replace chance.js with random-js for RNG

Testing infrastructure:
- Add Vitest with @testing-library/preact and happy-dom
- Set up test configuration and initial App tests
- Add Vitest UI for interactive test running

Build optimizations:
- Add cssnano for CSS minification
- Configure aggressive bundle optimizations in Vite
- Update to Tailwind CSS 4.1.17

Project structure:
- Consolidate entry point from main.tsx to index.tsx
- Reorganize CSS location (styles/index.css → index.css)
- Add ESLint with preact config
- Update TypeScript configuration for Preact
This commit is contained in:
Ryan Walters
2025-11-06 21:56:53 -06:00
parent d668a21750
commit e632e69b91
18 changed files with 3057 additions and 532 deletions

View File

@@ -19,10 +19,7 @@
property="article:published_time"
content="2022-11-25T08:54:58.977Z"
/>
<meta
property="og:image"
content="https://grain.xevion.dev/bg.jpeg"
/>
<meta property="og:image" content="https://grain.xevion.dev/bg.jpeg" />
<meta
property="og:image:secure_url"
content="https://grain.xevion.dev/bg.jpeg"
@@ -34,10 +31,7 @@
content="A simple gradient image generated with Grain."
/>
<meta property="og:image:type" content="jpeg" />
<meta
name="twitter:image"
content="https://grain.xevion.dev/bg.jpeg"
/>
<meta name="twitter:image" content="https://grain.xevion.dev/bg.jpeg" />
<meta name="twitter:card" content="summary_large_image" />
<meta name="twitter:url" content="https://grain.xevion.dev/" />
<meta name="twitter:domain" content="https://grain.xevion.dev/" />
@@ -49,6 +43,6 @@
</head>
<body>
<div id="root"></div>
<script type="module" src="/src/main.tsx"></script>
<script prerender type="module" src="/src/index.tsx"></script>
</body>
</html>