An Astro based front-end to interact with the ResearchEquals API.
  • TypeScript 70.8%
  • Astro 27.9%
  • SCSS 0.6%
  • CSS 0.4%
  • JavaScript 0.2%
Find a file
Chris Hartgerink 62dc997f30 refactor(lang): reduce localization complexity (#73)
The localization strings were a mess, this PR creates some more consistency and starts to streamline things.

Reviewed-on: #73
Co-authored-by: Chris Hartgerink <chris@libscie.org>
Co-committed-by: Chris Hartgerink <chris@libscie.org>
2026-04-08 15:48:45 +00:00
.vscode Initial commit from Astro 2025-08-25 11:00:40 +02:00
public fix(core): last looks in migration (#55) 2026-02-01 02:26:51 +00:00
src refactor(lang): reduce localization complexity (#73) 2026-04-08 15:48:45 +00:00
.env.example feat(outputs): add the creation and publishing of outputs (#46) 2026-01-10 19:10:04 +00:00
.gitignore feat(test): setup unit and integration testing (#36) 2025-11-14 13:04:38 +00:00
astro.config.mjs refactor(client): implement relative client side requests 2026-03-16 21:07:28 +01:00
cliff.toml doc(ctbs): add automated thanks based on commits 2026-03-10 11:29:45 +01:00
docker-compose.yml feat(core): add docker image 2026-02-10 09:28:52 +01:00
Dockerfile fix(docker): reintroduce YJS variable at build time 2026-03-19 20:58:24 +01:00
LICENSE chore(dx): update repo docs 2025-08-25 11:09:04 +02:00
package-lock.json chore(deps): upgrade react-dom dependency 2026-03-17 14:51:11 +01:00
package.json chore: bump version 2026-03-30 20:10:41 +02:00
playwright.config.ts feat(test): setup unit and integration testing (#36) 2025-11-14 13:04:38 +00:00
README.md refactor(lang): reduce localization complexity (#73) 2026-04-08 15:48:45 +00:00
tsconfig.json feat(test): setup unit and integration testing (#36) 2025-11-14 13:04:38 +00:00
vite.config.ts feat(test): setup unit and integration testing (#36) 2025-11-14 13:04:38 +00:00

ResearchEquals website

Conventional Commits SemVer NIX

Welcome to the repository for the ResearchEquals website! 👋 We build this front-end with priority for accessibility, reliability, and performance.

The front-end relies on the ResearchEquals API. If you are copying the code from this repository, you need to set up a separate ResearchEquals API yourself. In the future, we will add a docker image that will do both for you.

Development

npm install
npm run dev

🚀 Project Structure

Inside of our Astro project, you'll see the following folders and files:

/
├── public/
├── src/
│   └── pages/
│       └── index.astro
└── package.json

Astro looks for .astro or .md files in the src/pages/ directory. Each page is exposed as a route based on its file name.

There's nothing special about src/components/, but that's where we like to put any Astro/React/Vue/Svelte/Preact components.

Any static assets, like images, can be placed in the public/ directory.

🧞 Commands

All commands are run from the root of the project, from a terminal:

Command Action
npm install Installs dependencies
npm run dev Starts local dev server at localhost:4321
npm run build Build your production site to ./dist/
npm run preview Preview your build locally, before deploying
npm run astro ... Run CLI commands like astro add, astro check
npm run astro -- --help Get help using the Astro CLI
npm run test Run unit tests
npx playwright test Run browser integration tests
npx playwright codegen Create interactive tests
npx @hocuspocus/cli --port 1234 --sqlite Run the collaborative editing server

To run the playwright tests, you may need to run npx playwright install to ensure you have all the browsers.

docker

docker buildx build --platform linux/amd64 --tag git.libscie.org/researchequals/frontend:latest ./
docker push --platform=linux/amd64 git.libscie.org/researchequals/frontend:latest

Localization

ResearchEquals is localized using i18n. The localization files are in src/i18n/<lang>.json and follow the same structure as the folders. In order to find the localization strings for src/components/StatsGrid.tsx use the localization keys that start with components.StatsGrid.

Exceptions are generics, which include e.g., Save, Delete, and errors. These are at the root of the localization key (e.g., save and error.general).