https://github.com/sisques-labs/gardenia-web
Web app for Gardenia — a gardening companion that keeps your green spaces organized, shared, and easy to look after.
https://github.com/sisques-labs/gardenia-web
gardenia gardening graphql nextjs plants typescript web
Last synced: 11 days ago
JSON representation
Web app for Gardenia — a gardening companion that keeps your green spaces organized, shared, and easy to look after.
- Host: GitHub
- URL: https://github.com/sisques-labs/gardenia-web
- Owner: sisques-labs
- License: other
- Created: 2026-05-23T20:06:51.000Z (about 2 months ago)
- Default Branch: main
- Last Pushed: 2026-07-01T17:18:20.000Z (14 days ago)
- Last Synced: 2026-07-01T17:28:17.739Z (14 days ago)
- Topics: gardenia, gardening, graphql, nextjs, plants, typescript, web
- Language: TypeScript
- Homepage:
- Size: 3.72 MB
- Stars: 0
- Watchers: 0
- Forks: 0
- Open Issues: 36
-
Metadata Files:
- Readme: README.md
- Changelog: CHANGELOG.md
- License: LICENSE
Awesome Lists containing this project
README
# Gardenia
Gardenia is a gardening companion web application that helps you track your plants, spaces, care logs, harvests, and planting calendar — all in one place.
## Tech stack
| Layer | Technology |
|-------|-----------|
| Framework | [Next.js 16](https://nextjs.org/) (App Router) |
| Language | TypeScript 5 |
| Styling | [Tailwind CSS v4](https://tailwindcss.com/) |
| UI primitives | [Radix UI](https://www.radix-ui.com/) |
| State / data | [TanStack Query](https://tanstack.com/query), [Zustand](https://zustand-demo.pmnd.rs/), [Apollo Client](https://www.apollographql.com/docs/react/) |
| Forms | [React Hook Form](https://react-hook-form.com/) + [Zod](https://zod.dev/) |
| Tests | [Vitest](https://vitest.dev/) + [Testing Library](https://testing-library.com/) |
| Component dev | [Storybook](https://storybook.js.org/) |
| Package manager | [pnpm](https://pnpm.io/) |
## Prerequisites
- Node.js ≥ 20
- pnpm ≥ 9 (`npm install -g pnpm`)
## Environment setup
Copy the example env file and edit the values for your local environment:
```bash
cp .env.example .env.local
```
| Variable | Purpose |
|----------|---------|
| `NEXT_PUBLIC_API_URL` | REST API base URL (e.g. `http://localhost:3000/api`) |
| `NEXT_PUBLIC_GRAPHQL_URL` | GraphQL endpoint (e.g. `http://localhost:3000/graphql`) |
## Getting started
```bash
# Install dependencies
pnpm install
# Start the development server
pnpm dev
```
Open [http://localhost:3000](http://localhost:3000) in your browser. The page hot-reloads on file changes.
## Available scripts
| Command | Description |
|---------|-------------|
| `pnpm dev` | Start the Next.js dev server |
| `pnpm build` | Production build |
| `pnpm start` | Start the production server |
| `pnpm lint` | Run ESLint |
| `pnpm test` | Run unit tests (Vitest) |
| `pnpm test:watch` | Run tests in watch mode |
| `pnpm test:coverage` | Run tests with coverage report |
| `pnpm storybook` | Start Storybook on port 6006 |
| `pnpm build-storybook` | Build the static Storybook |
## Architecture
The project follows a **Domain-Driven Design (DDD)** approach. Source code lives under `src/` and `app/`.
```
gardenia-web/
├── app/ # Next.js App Router (routes, layouts, API routes)
│ ├── [lang]/ # i18n root segment
│ ├── api/ # Next.js route handlers
│ ├── layout.tsx
│ └── page.tsx
└── src/
├── core/ # Business domains
│ ├── auth/
│ ├── calendar/
│ ├── care-log/
│ ├── harvests/
│ ├── home/
│ ├── inventory/
│ ├── planting-spots/
│ ├── plants/
│ ├── spaces/
│ └── users/
├── shared/ # Cross-cutting concerns
│ ├── config/ # Environment config & validation
│ ├── infrastructure/ # HTTP / GraphQL clients
│ ├── lib/ # Generic utilities
│ └── presentation/ # Shared UI components & hooks
└── design-system/ # Tokens, theme, and base CSS
```
Each domain under `src/core/` is self-contained and may include its own `infrastructure/` (data fetching), `presentation/` (components, hooks), and domain models.
## Docker
A `Dockerfile` is provided for containerised deployments. The Next.js build is configured with `output: 'standalone'` for minimal image size.
## Contributing
1. Branch off `develop` using the naming convention `/` (e.g. `feat/add-harvest-form`).
2. Commit following [Conventional Commits](https://www.conventionalcommits.org/).
3. Open a PR against `develop`.
Pre-commit hooks (Husky + lint-staged) run ESLint on staged TypeScript files automatically.
## License
[MIT](LICENSE)