Easy-to-manage touch screens
무료 오픈소스 터치스크린으로 USB 설정 가이드, 드래그‑드롭 편집기, 로컬 제어를 제공하며 Home Assistant용으로 제작되었습니다
Family Greenhouse: 식물 물주기 일정, 알림, 관리 기록 및 작업을 가족과 공유
Share plant watering schedules, reminders, care logs, and tasks with your household. Family Greenhouse is free for one home, up to 3 people and 20 plants.
라이프스타일TypeScript · JavaScriptGitHub @ChelseaKR온라인운영자 미확인
써 보셨어요? 한 번만 눌러 주세요. 로그인은 필요 없어요.
Shared plant care for a household, not a single owner: member roles, claimable tasks, vacation cover, and time-boxed sitter links that need no account. Pet-safety answers come only from a hand-curated, ASPCA-grounded table, never generated. Bilingual EN/ES, PWA plus iOS and Android shells, and a public API. Free tier with paid plans.
저장소 README에서 가져옴
README 전체를 불러오는 중입니다. 아래는 저장된 발췌입니다.
A shared plant-care journal for the whole household — a collaborative houseplant tracker with per-plant watering schedules, recurring care tasks (water, fertilize, prune…), and reminders that find the right person in the browser or by email, so nobody has to ask "did you water the Monstera?" ever again.
🌿 Live app (free accounts; paid plans on the web): familygreenhouse.net · 📚 Docs: docs/ · 🧭 Start here: docs/development.mdREADME 전문 보기 ↗A shared plant-care journal for the whole household — a collaborative houseplant tracker with per-plant watering schedules, recurring care tasks (water, fertilize, prune…), and reminders that find the right person in the browser or by email, so nobody has to ask "did you water the Monstera?" ever again.
🌿 Live app (free accounts; paid plans on the web): familygreenhouse.net · 📚 Docs: docs/ · 🧭 Start here: docs/development.md
Commercial status — effective September 1, 2026. Free account registration is open. Paid plans are available on the web; purchases and plan changes are made by a household admin in Settings. The dated transitions, and the two gates that control payment activity, are in
docs/COMMERCIAL-STATUS.md.
Built with React + TypeScript on the frontend and AWS Lambda + DynamoDB (single-table) + Cognito on the backend, plus a local Express dev server that mirrors the API surface so you can develop entirely offline — no AWS account or third-party keys required to run it locally.
In loving memory of my mom, Joyce - who taught us to keep growing. 🌱
family-greenhouse/
├── frontend/ React + Vite SPA (+ Capacitor iOS/Android shells — docs/mobile.md)
├── backend/ Lambda handlers + a local Express mock that mirrors them
├── infrastructure/ Terraform stack (network, Cognito, DDB, S3, API Gateway, CloudFront)
├── docs/ Detailed docs — start with development.md if you're new
├── scripts/ One-off shell helpers
├── .github/ CI + CD workflows
└── package.json npm workspaces root
You need Node 22+ (see .nvmrc) and npm 10+. From the repo root:
npm install # installs across all workspaces
# Two terminals:
npm --workspace backend run dev # local Express mock at :4000
npm --workspace frontend run dev # Vite dev server at :3000
Open http://localhost:3000 and sign in with [email protected] / password123 — the dev server seeds a household for you on boot.
For everything else (running tests, deploying, configuring channels) follow the deeper docs:
docs/development.md — local dev workflow, where to add a new endpointdocs/architecture.md — how the pieces fit, single-table DDB layout, request lifecycledocs/deployment.md — from-zero AWS deploydocs/testing.md — the test pyramid we run + how to add to itdocs/notifications.md — browser, email and web-push details, and the SMS channel that is built but switched offdocs/billing.md — Stripe integration, plan caps, webhook flowdocs/public-api.md — read-only public API: key auth, scopes, rate limits, endpointsdocs/production-checklist.md — gating list for going livedocs/incidents.md — severity levels, the first 15 minutes, post-mortem templatedocs/runbooks.md — step-by-step fixes (rollback, DDB throttle, Stripe webhooks, PITR…)Headline features that are wired end-to-end:
MEMBER#{userId} membership row — the Cognito custom:household_* claims are defence-in-depth only and are never trusted for authorization (backend/src/middleware/auth.ts)commercialHoldActive: false in commercial-status.json and PAYMENTS_ENABLED equal to the exact string "1" at runtime (isPaymentActivityAllowed, backend/src/config/commercialStatus.ts)What needs real infra credentials to leave demo mode is enumerated in docs/production-checklist.md. Every channel/integration falls back gracefully to a structured log line when its env var isn't set, so you don't need a single key to develop locally.
npm test # everything (workspaces)
npm --workspace backend run test:watch # vitest watch on backend
npm --workspace frontend run test:e2e # Playwright (boots both servers)
npm run typecheck # strict TS across both workspaces
npm run lint # eslint across both workspaces
npm run format # prettier
Branches off main, conventional-commits style messages, PR with passing CI:
feat(plants): add identification from photo
fix(billing): clamp price-id env lookup
docs: rewrite README
Types we use: feat, fix, docs, style, refactor, perf, test, chore, ci, build, revert. The commitlint hook in .githooks/ will reject anything else.
This repo is onboarded to the portfolio's STANDARDS/ (vendored at docs/standards/, pinned v3.0.1). State is honest, not aspirational: completed controls name their evidence and residual gaps stay explicit. Full detail (per-control findings, ASVS level, AI-eval waiver, RTF §A–F) lives in docs/RESPONSIBLE-TECH-AUDITS.md; this table is the required top-level declaration (DOC-11/12/13).
| Standard | Applies? | State |
|---|---|---|
| Responsible-Tech Framework | Applies (PII + AI) | Partial — §A–F audit, dated DPIA, AI risk register, model card, EU classification, disclosure, and live grounding/privacy controls are committed; ISO 42001 SoA and a published ACR/VPAT remain gaps |
| Code Quality | Applies (TS/Node; Python N/A — no Python code in this repo) | Partial — strict TypeScript, zero-warning ESLint, coverage floors, CODEOWNERS, and branch rules are gated. Backend clears 80% on lines/statements/functions; backend branches (~76%) and all four frontend metrics remain ratcheted below the portfolio's 80% target, tracked under CQ-16/P1-5 |
| Security & Supply-Chain | Applies — ASVS L2 (real PII: emails, phones, photos, household graphs) | Partial — CodeQL, Semgrep, Gitleaks, npm audit, Scorecard, SHA-pinned Actions, and a complete dependency disposition are gated/evidenced; release SBOM, provenance, and signed-tag enforcement remain gaps |
| CI/CD | Applies | Met for current service shape — committed ruleset + CODEOWNERS, strict required checks, OIDC deploys, workflow audit, concurrency, and make verify parity; the ruleset keeps an owner break-glass bypass (note below); production deployment retains its explicit Environment approval |
| Release & Versioning | Applies — tagged releases drive prod deploys | Partial — root/workspace versions are aligned at 0.45.0; tag/version and CHANGELOG gates run at the tagged ref. Release SBOM/provenance and blocking signed-tag verification remain open |
| Observability | Applies — backend ≈ Tier A-adapted (serverless), frontend ≈ Tier B (Web Vitals) | Met for current service shape — 28-day SLO contract, health-excluded RED metrics, burn-rate alerts, X-Ray, first-party browser RUM, release correlation, and regression gate; see ## Observability below |
| Performance | Applies | size-limit, Lighthouse, and the CI bundle-size job enforce the current frontend performance budget |
| Accessibility | Applies | Partial — WCAG 2.2 AA axe coverage spans public and authenticated routes, Lighthouse and keyboard/reflow/reduced-motion gates pass; release-time screen-reader/high-contrast walkthrough and a published ACR/VPAT remain human/external gates |
| Internationalization | Applies (opted in — EN/ES) | Partial — docs/i18n.md, EN/ES key/placeholder/plural/TODO gates, UTF-8 validation, and a hardcoded-string ratchet exist; native-speaker sign-off, pseudolocale overflow, RTL logical-property lint, and remaining literal migration remain |
On the CI/CD row: the committed protect-main ruleset carries exactly one bypass actor — the repository admin role, bypass_mode: always — as the owner's break-glass path. An empty bypass list is not a stricter gate; it removes the only way to repair a wedged main, and GitHub returns 201 when you apply one. That single entry is a deliberate, recorded divergence from the vendored CI-CD-STANDARD.md CICD-15 (PR-only bypass) and §5.1 (empty bypass list) — reasoning, the live-versus-committed state, and the owner-only reconcile command are in .github/rulesets/README.md.
On partial rows: the unresolved work is either protected by the dated AI-evaluation waiver, tied to an external production/account/hardware gate, or named in the corresponding audit with a re-open trigger. Historical remediation notes do not override this current declaration.
Finding IDs. Some code comments and ADRs cite short IDs — CQ-16, CICD-27, DOC-11, P1-5, P2-7. They come from the dated 2026-07-05 conformance audit of this repo and its remediation plan, cited by ADR 0006. The private audit workspace is not part of this repository, so the IDs are traceable labels, not links. CQ-* / CICD-* / DOC-* / RTF-* number per-standard findings; P1-* / P2-* / P3-* number the prioritized remediation items. The one cited most often in code: CQ-16 / P1-5 — coverage floors sit below the CODE-QUALITY standard's 80% target and must ratchet upward release over release instead of staying pinned. That is the policy the thresholds comments in frontend/vitest.config.ts and backend/vitest.config.ts are enforcing.
Backend: CloudWatch + X-Ray (active tracing on every Lambda invocation), structured JSON logs via pino with requestId/userId/householdId/traceId correlation (utils/logger.ts). Tier: A-adapted for serverless — the OBSERVABILITY-STANDARD's /livez//readyz probes are N/A (no long-lived process to probe; Route53 continuously checks /health). The dashboard and alarms in infrastructure/modules/monitoring/ cover native gateway health, per-route RED signals, Lambda/DynamoDB saturation, DLQs, browser errors, Core Web Vitals, and integration budgets. Application SLO metrics exclude synthetic GET /health traffic.
Frontend: Tier B — Lighthouse remains the lab gate (LCP <2500, CLS <0.1, a11y ≥0.95), and a small first-party RUM rail reports sanitized browser errors plus LCP/CLS/INP to CloudWatch with route and release correlation. It honors Do Not Track and sends no stack traces, query strings, user ids, or free text. Optional Sentry plumbing remains available but is not required for baseline coverage.
The 28-day 99.5% availability, p95 latency, saturation, and frontend-experience objectives are machine-checked in observability/slos.yaml. Operational queries and response steps are in docs/observability.md. OTel/W3C traceparent remains intentionally deferred while the service uses X-Ray-native correlation.
Supported: latest tagged release only (pre-1.0) — see CHANGELOG.md.
Elastic License 2.0 — the source is free to read, run, modify, and self-host for your own household. What it doesn't allow is offering Family Greenhouse (or a substantial copy of it) to others as a hosted/managed service. If that's something you want to do, get in touch: [email protected].
docs/support.md| AI Evaluation | Applies — production Bedrock chat (tool-use + RAG) + leaf-health vision | Dated waiver (expires 2026-10-05) — starter benchmark + live quantitative grounding block + model card; full RAGAS-class metric suite and red-team scan are not yet built. Judge calibration remains N/A — no LLM-as-judge is used; see docs/RESPONSIBLE-TECH-AUDITS.md |
| Documentation | Applies | Met for current scope — README declaration, DoD, CHANGELOG, citation metadata, ADRs, API contracts, operational runbooks, and dated audit artifacts are committed and drift-gated where mechanical |
| Quality & Metrics | Applies | Partial — exact merge gates and the DoD are committed in DEFINITION_OF_DONE.md; automated portfolio DORA reporting and the seven-part AI-capabilities governance record remain gaps |
| AI Development Measurement | Applies — repository ledger gap | Development uses AI-assisted tooling; the portfolio Track A metrics apply, while the repository-specific roadmap declaration and baseline remain to be added |
| Incident Response | Applies | docs/incidents.md defines severity, first-response, communications, and postmortem practice for the deployed service |
| Data Governance | Applies — L3 PII | The DPIA inventories PII, storage, deletion, and retention; remaining lifecycle gaps stay explicit there |