Skip to content

Comments

Replaces geist and styled-components with Tailwind#84

Open
michaelwschultz wants to merge 22 commits intomainfrom
ms/move-to-tailwind
Open

Replaces geist and styled-components with Tailwind#84
michaelwschultz wants to merge 22 commits intomainfrom
ms/move-to-tailwind

Conversation

@michaelwschultz
Copy link
Owner

@michaelwschultz michaelwschultz commented Dec 28, 2025

Big update incoming. This may take a bit, but I've been meaning to give the site a design refresh for a while.

Notable updates

Replaces GeistUI and Styled-Components with Tailwind

This one has been a long time coming. When I launched Hemolog, I wasn't focused on the UI. Building something that was functional, extensible, and simple to change later was the goal. I think I achieved that, but I've been meaning to do a design pass for a while. Unfortunately that means a rather large refactor in order to make the frontend simpler to manipulate and maintain. This PR does just that and more...

New custom components

I basically had cursor go through and migrate a bunch of the old geist components to raw jsx + tailwind. This will need some massaging but it saved me a ton of time and did the bulk of the work. Now I should have a relatively clean canvas.

Reduced page load

Reducing the 3rd party dependencies has also made the site a bit quicker. More improvements to come in this department as I'll most likely update to the most recent version of Next and React as well which should give some improvements in the stats department for free.


Note

Major stack and UI migration with broad tooling updates.

  • Replace legacy UI: Remove Geist/styled-components components/pages; adopt Tailwind-based UI and custom components
  • Dependency upgrades: Move to Next.js 16/React 19; add TanStack Query, Recharts, react-hot-toast, @silk-hq/components; drop SWR, react-vis, Geist, styled-components
  • Tooling/config: Add .cursorrules, Biome config, VSCode settings; update package.json scripts (rules switch, seed) and versions
  • CI revamp: Split setup/run jobs, cache pnpm/Cypress, add Java, upgrade actions, and wait for app on :3000 in Cypress action
  • Cypress tests: Update selectors and flows, add clipboard stubbing and hydration wait; adjust config
  • Firebase rules: Reorganize to firebase/ with dev/prod rule sets; update firebase.json paths
  • Cleanup: Remove legacy Next pages and old lib (auth/db/hooks) in preparation for App Router structure

Written by Cursor Bugbot for commit 647e05e. This will update automatically on new commits. Configure here.

@vercel
Copy link

vercel bot commented Dec 28, 2025

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Review Updated (UTC)
hemolog-com Error Error Jan 25, 2026 10:50pm

}
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Insecure Firestore rules committed as default

The main firestore.rules file now contains development rules allowing unrestricted read/write access (allow read, write: if true). While firestore.prod.rules contains proper authentication checks and a script exists to switch between them, the default committed state is insecure. If deployed via firebase deploy without first running ./switch-rules.sh prod, the production database would be completely open to unauthorized access.

Fix in Cursor Fix in Web

allow read, write: if true;
}
}
}
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Insecure Firestore rules committed to repository by default

The firebase/firestore.rules file contains completely permissive development rules (allow read, write: if true;) that allow anyone to read and write all data without authentication. This file is referenced by firebase.json and would be deployed to production by default. While there's a script system to switch to production rules via rules:prod, the committed default state is insecure. If deployment occurs using the standard build command (or direct firebase deploy) without explicitly running rules:prod first, it would expose all user data, infusions, and feedback to unauthenticated access.

Additional Locations (1)

Fix in Cursor Fix in Web

Copy link
Owner Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Need to make sure we never commit this default state.

return Math.random()
.toString(36)
.substring(2, 2 + length)
}
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Insecure and potentially short unique string generation

The generateUniqueString function was rewritten to use Math.random().toString(36).substring(2, 2 + length) instead of the cryptographically secure nanoid library. This has two problems: (1) Math.random() is not cryptographically secure and is predictable, making generated API keys vulnerable to guessing attacks, and (2) the function can return strings shorter than the requested length because small random values like 0.5 produce very short base-36 representations. API keys requesting 20 characters could receive as few as 1-2 characters. This affects API key generation and emergency alert IDs.

Fix in Cursor Fix in Web

},
"[json, jsonc]": {
"editor.defaultFormatter": "vscode.json-language-features"
},
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

VSCode settings use invalid language-specific override syntax

Low Severity

The VSCode settings file uses [javascript, typescript] and [json, jsonc] as keys for language-specific overrides, but this syntax is invalid. VSCode expects individual language identifiers like [javascript] and [typescript] as separate entries. The comma-separated format won't be recognized as a language selector, so the editor.defaultFormatter setting will not be applied to these file types as intended.

Fix in Cursor Fix in Web

"version": "2.9.0",
"type": "module",
"packageManager": "pnpm@10.13.1",
"packageManager": "pnpm@10.28.0",
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

pnpm version mismatch between package.json and CI workflow

Medium Severity

The package.json specifies packageManager: "pnpm@10.28.0" but the GitHub Actions workflow uses version: 10.13.1 in both jobs. This version mismatch means CI runs with a different pnpm version than what developers use locally, which could lead to inconsistent lockfile handling, cache issues, or different dependency resolution behavior between environments.

Additional Locations (2)

Fix in Cursor Fix in Web


- name: Install pnpm
uses: pnpm/action-setup@v2
uses: pnpm/action-setup@v4
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

pnpm version mismatch between CI and package.json

Medium Severity

The package.json was updated to use pnpm@10.28.0 but the GitHub Actions workflow still specifies version: 10.13.1 in both the setup-environment and run-tests jobs. This version mismatch between local development and CI could cause different dependency resolution behavior, lockfile format incompatibilities, or feature differences between environments.

Additional Locations (1)

Fix in Cursor Fix in Web

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant