From 4976eafc6c84431dd503508b85ced4bae03aeb46 Mon Sep 17 00:00:00 2001 From: Trey t Date: Sat, 7 Mar 2026 06:33:38 -0600 Subject: [PATCH] Rebrand from Casera/MyCrib to honeyDue Total rebrand across all Go API source files: - Go module path: casera-api -> honeydue-api - All imports updated (130+ files) - Docker: containers, images, networks renamed - Email templates: support email, noreply, icon URL - Domains: casera.app/mycrib.treytartt.com -> honeyDue.treytartt.com - Bundle IDs: com.tt.casera -> com.tt.honeyDue - IAP product IDs updated - Landing page, admin panel, config defaults - Seeds, CI workflows, Makefile, docs - Database table names preserved (no migration needed) Co-Authored-By: Claude Opus 4.6 --- .env.example | 6 +- .github/workflows/backend-ci.yml | 4 +- CLAUDE.md | 12 +- Makefile | 10 +- README.md | 42 ++--- .../(dashboard)/automation-reference/page.tsx | 22 +-- .../src/app/(dashboard)/users/[id]/client.tsx | 6 +- admin/src/app/layout.tsx | 4 +- admin/src/components/app-sidebar.tsx | 2 +- admin/src/components/login-form.tsx | 4 +- app.json | 4 +- bruno-collections/casera-api/bruno.json | 2 +- .../casera-api/environments/Dev.bru | 2 +- cmd/api/main.go | 18 +-- cmd/worker/main.go | 16 +- deploy/README.md | 2 +- deploy/cluster.env.example | 6 +- deploy/prod.env.example | 16 +- deploy/scripts/deploy_prod.sh | 22 +-- deploy/swarm-stack.prod.yml | 12 +- dev.sh | 18 +-- docker-compose.dev.yml | 60 +++---- docker-compose.yml | 28 ++-- docs/AUDIT_FINDINGS.md | 10 +- docs/DOKKU_SETUP.md | 152 +++++++++--------- docs/GO_TO_PROD.md | 14 +- docs/LOCALIZATION_PLAN.md | 12 +- docs/PUSH_NOTIFICATIONS.md | 12 +- docs/SECURE_MEDIA_ACCESS.md | 4 +- docs/SUBSCRIPTION_WEBHOOKS.md | 12 +- docs/TASK_KANBAN_CATEGORIZATION.md | 4 +- docs/TASK_KANBAN_LOGIC.md | 2 +- docs/TASK_LOGIC_ARCHITECTURE.md | 14 +- docs/marketing/COMPETITOR_ANALYSIS.md | 22 +-- docs/marketing/PRESS_RELEASE.md | 52 +++--- docs/marketing/SOCIAL_MEDIA_KIT.md | 54 +++---- docs/openapi.yaml | 10 +- go.mod | 2 +- internal/admin/dto/requests.go | 2 +- .../admin/handlers/admin_security_test.go | 2 +- internal/admin/handlers/admin_user_handler.go | 6 +- .../handlers/apple_social_auth_handler.go | 4 +- internal/admin/handlers/auth_handler.go | 8 +- internal/admin/handlers/auth_token_handler.go | 4 +- internal/admin/handlers/completion_handler.go | 4 +- .../handlers/completion_image_handler.go | 4 +- .../handlers/confirmation_code_handler.go | 4 +- internal/admin/handlers/contractor_handler.go | 4 +- internal/admin/handlers/dashboard_handler.go | 4 +- internal/admin/handlers/device_handler.go | 4 +- internal/admin/handlers/document_handler.go | 4 +- .../admin/handlers/document_image_handler.go | 4 +- .../admin/handlers/feature_benefit_handler.go | 4 +- .../admin/handlers/limitations_handler.go | 2 +- internal/admin/handlers/lookup_handler.go | 8 +- .../admin/handlers/notification_handler.go | 10 +- .../handlers/notification_prefs_handler.go | 4 +- internal/admin/handlers/onboarding_handler.go | 4 +- .../handlers/password_reset_code_handler.go | 4 +- internal/admin/handlers/promotion_handler.go | 4 +- internal/admin/handlers/residence_handler.go | 4 +- internal/admin/handlers/settings_handler.go | 4 +- internal/admin/handlers/share_code_handler.go | 4 +- .../admin/handlers/subscription_handler.go | 4 +- internal/admin/handlers/task_handler.go | 4 +- .../admin/handlers/task_template_handler.go | 4 +- internal/admin/handlers/user_handler.go | 4 +- .../admin/handlers/user_profile_handler.go | 4 +- internal/admin/routes.go | 14 +- internal/apperrors/handler.go | 6 +- internal/config/config.go | 16 +- internal/database/database.go | 12 +- internal/dto/requests/document.go | 2 +- internal/dto/responses/auth.go | 2 +- internal/dto/responses/contractor.go | 2 +- internal/dto/responses/document.go | 2 +- internal/dto/responses/residence.go | 4 +- internal/dto/responses/task.go | 6 +- internal/dto/responses/task_template.go | 2 +- internal/handlers/auth_handler.go | 12 +- internal/handlers/auth_handler_test.go | 10 +- internal/handlers/contractor_handler.go | 8 +- internal/handlers/contractor_handler_test.go | 8 +- internal/handlers/document_handler.go | 12 +- internal/handlers/document_handler_test.go | 8 +- internal/handlers/media_handler.go | 8 +- internal/handlers/media_handler_test.go | 4 +- internal/handlers/noauth_test.go | 8 +- internal/handlers/notification_handler.go | 6 +- .../handlers/notification_handler_test.go | 8 +- internal/handlers/residence_handler.go | 14 +- internal/handlers/residence_handler_test.go | 10 +- internal/handlers/static_data_handler.go | 6 +- internal/handlers/subscription_handler.go | 6 +- .../handlers/subscription_webhook_handler.go | 8 +- internal/handlers/task_handler.go | 8 +- internal/handlers/task_handler_test.go | 10 +- internal/handlers/task_template_handler.go | 4 +- internal/handlers/tracking_handler.go | 2 +- internal/handlers/upload_handler.go | 8 +- internal/handlers/upload_handler_test.go | 4 +- internal/handlers/user_handler.go | 6 +- internal/i18n/translations/de.json | 2 +- internal/i18n/translations/en.json | 2 +- internal/i18n/translations/es.json | 2 +- internal/i18n/translations/fr.json | 2 +- internal/i18n/translations/it.json | 2 +- internal/i18n/translations/ja.json | 2 +- internal/i18n/translations/ko.json | 2 +- internal/i18n/translations/nl.json | 2 +- internal/i18n/translations/pt.json | 2 +- internal/i18n/translations/zh.json | 2 +- internal/integration/contract_test.go | 6 +- internal/integration/integration_test.go | 16 +- internal/integration/kmp_contract_test.go | 2 +- .../integration/kmp_model_contract_test.go | 6 +- .../integration/security_regression_test.go | 22 +-- .../integration/subscription_is_free_test.go | 18 +-- internal/middleware/admin_auth.go | 6 +- internal/middleware/auth.go | 6 +- internal/middleware/auth_safety_test.go | 4 +- internal/middleware/logger.go | 2 +- internal/monitoring/service.go | 2 +- internal/push/apns.go | 2 +- internal/push/client.go | 2 +- internal/push/fcm.go | 2 +- internal/repositories/admin_repo.go | 2 +- internal/repositories/contractor_repo.go | 2 +- internal/repositories/contractor_repo_test.go | 4 +- internal/repositories/document_repo.go | 2 +- internal/repositories/document_repo_test.go | 4 +- internal/repositories/notification_repo.go | 2 +- .../repositories/notification_repo_test.go | 4 +- internal/repositories/reminder_repo.go | 2 +- internal/repositories/residence_repo.go | 2 +- internal/repositories/residence_repo_test.go | 4 +- internal/repositories/subscription_repo.go | 2 +- .../repositories/subscription_repo_test.go | 4 +- internal/repositories/task_repo.go | 6 +- internal/repositories/task_repo_test.go | 4 +- internal/repositories/task_template_repo.go | 2 +- internal/repositories/user_repo.go | 2 +- internal/repositories/user_repo_test.go | 4 +- internal/router/router.go | 30 ++-- internal/services/apple_auth.go | 2 +- internal/services/auth_service.go | 12 +- internal/services/cache_service.go | 2 +- internal/services/contractor_service.go | 10 +- internal/services/contractor_service_test.go | 6 +- internal/services/document_service.go | 10 +- internal/services/email_service.go | 112 ++++++------- internal/services/google_auth.go | 2 +- internal/services/iap_validation.go | 2 +- internal/services/notification_service.go | 8 +- .../services/notification_service_test.go | 8 +- internal/services/onboarding_email_service.go | 2 +- internal/services/pdf_service.go | 2 +- internal/services/residence_service.go | 16 +- internal/services/residence_service_test.go | 10 +- internal/services/storage_service.go | 2 +- internal/services/stripe_service.go | 8 +- internal/services/subscription_service.go | 16 +- .../services/subscription_service_test.go | 8 +- internal/services/task_button_types.go | 4 +- internal/services/task_categorization_test.go | 8 +- internal/services/task_service.go | 10 +- internal/services/task_service_test.go | 8 +- internal/services/task_template_service.go | 4 +- internal/services/user_service.go | 6 +- internal/task/categorization/chain.go | 4 +- .../task/categorization/chain_breakit_test.go | 4 +- internal/task/categorization/chain_test.go | 4 +- internal/task/consistency_test.go | 10 +- internal/task/predicates/predicates.go | 2 +- internal/task/predicates/predicates_test.go | 4 +- internal/task/scopes/scopes_test.go | 8 +- internal/task/task.go | 10 +- internal/testutil/testutil.go | 8 +- internal/worker/jobs/email_jobs.go | 4 +- internal/worker/jobs/handler.go | 12 +- migrations/002_goadmin_tables.up.sql | 2 +- seeds/001_lookups.sql | 2 +- seeds/002_test_data.sql | 16 +- seeds/003_admin_user.sql | 4 +- seeds/003_task_templates.sql | 2 +- static/css/style.css | 2 +- static/images/icon.png | Bin 474748 -> 300392 bytes static/index.html | 16 +- static/js/main.js | 2 +- 189 files changed, 831 insertions(+), 831 deletions(-) diff --git a/.env.example b/.env.example index 6f53cb9..ed05fdc 100644 --- a/.env.example +++ b/.env.example @@ -6,7 +6,7 @@ TIMEZONE=UTC SECRET_KEY=your-secret-key-here-change-this-in-production # Database Settings (PostgreSQL) -POSTGRES_DB=casera +POSTGRES_DB=honeydue POSTGRES_USER=postgres POSTGRES_PASSWORD=change-this-secure-password DB_HOST=localhost @@ -26,14 +26,14 @@ EMAIL_PORT=587 EMAIL_USE_TLS=true EMAIL_HOST_USER=your-email@gmail.com EMAIL_HOST_PASSWORD=your-app-password -DEFAULT_FROM_EMAIL=Casera +DEFAULT_FROM_EMAIL=honeyDue # APNs Settings (iOS Push Notifications) # Direct APNs integration - no external push server needed APNS_AUTH_KEY_PATH=/path/to/AuthKey_XXXXXX.p8 APNS_AUTH_KEY_ID=XXXXXXXXXX APNS_TEAM_ID=XXXXXXXXXX -APNS_TOPIC=com.example.casera +APNS_TOPIC=com.tt.honeyDue APNS_PRODUCTION=false # Set to true for production APNs, false for sandbox # FCM Settings (Android Push Notifications) diff --git a/.github/workflows/backend-ci.yml b/.github/workflows/backend-ci.yml index 548785a..ff9e55a 100644 --- a/.github/workflows/backend-ci.yml +++ b/.github/workflows/backend-ci.yml @@ -60,10 +60,10 @@ jobs: cache: true - name: Build API - run: go build -ldflags "-s -w" -o bin/casera-api ./cmd/api + run: go build -ldflags "-s -w" -o bin/honeydue-api ./cmd/api - name: Build Worker - run: go build -ldflags "-s -w" -o bin/casera-worker ./cmd/worker + run: go build -ldflags "-s -w" -o bin/honeydue-worker ./cmd/worker lint: name: Lint diff --git a/CLAUDE.md b/CLAUDE.md index b620150..0941653 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -40,7 +40,7 @@ This document contains: **Quick reference:** ```go // Use these - DON'T write inline task logic -import "github.com/treytartt/casera-api/internal/task" +import "github.com/treytartt/honeydue-api/internal/task" task.IsCompleted(t) // Check if task is completed task.IsOverdue(t, now) // Check if task is overdue @@ -50,7 +50,7 @@ task.CategorizeTask(t, 30) // Get kanban column for task ## Project Overview -Casera API is a Go REST API for the MyCrib/Casera property management platform. It provides backend services for iOS and Android mobile apps built with Kotlin Multiplatform. +honeyDue API is a Go REST API for the HoneyDue/honeyDue property management platform. It provides backend services for iOS and Android mobile apps built with Kotlin Multiplatform. **Tech Stack:** - **HTTP Framework**: Echo v4 @@ -65,7 +65,7 @@ Casera API is a Go REST API for the MyCrib/Casera property management platform. ## Project Structure ``` -myCribAPI-go/ +honeyDueAPI-go/ ├── cmd/ │ ├── api/main.go # API server entry point │ └── worker/main.go # Background worker entry point @@ -163,7 +163,7 @@ internal/task/ **Always use this package for task logic:** ```go -import "github.com/treytartt/casera-api/internal/task" +import "github.com/treytartt/honeydue-api/internal/task" // Predicates (in-memory checks) if task.IsCompleted(t) { ... } @@ -194,7 +194,7 @@ api.Use(middleware.AuthRequired(db)) Use structured errors from `internal/apperrors/`: ```go -import "github.com/treytartt/casera-api/internal/apperrors" +import "github.com/treytartt/honeydue-api/internal/apperrors" // Return typed errors return apperrors.NewNotFoundError("task", taskID) @@ -401,5 +401,5 @@ func TestTaskHandler_Create(t *testing.T) { ## Related Repositories -- **Mobile App**: `../MyCribKMM` - Kotlin Multiplatform iOS/Android app +- **Mobile App**: `../HoneyDueKMM` - Kotlin Multiplatform iOS/Android app - **Root Docs**: `../CLAUDE.md` - Full-stack documentation diff --git a/Makefile b/Makefile index f6a571a..3dfbd08 100644 --- a/Makefile +++ b/Makefile @@ -1,8 +1,8 @@ .PHONY: build run test contract-test clean deps lint docker-build docker-up docker-down migrate # Binary names -API_BINARY=casera-api -WORKER_BINARY=casera-worker +API_BINARY=honeydue-api +WORKER_BINARY=honeydue-worker # Build flags LDFLAGS=-ldflags "-s -w" @@ -85,9 +85,9 @@ docker-restart: # Docker commands (prod — builds production images) docker-build-prod: - docker build --target api -t $${REGISTRY:-ghcr.io/treytartt}/casera-api:$${TAG:-latest} . - docker build --target worker -t $${REGISTRY:-ghcr.io/treytartt}/casera-worker:$${TAG:-latest} . - docker build --target admin -t $${REGISTRY:-ghcr.io/treytartt}/casera-admin:$${TAG:-latest} . + docker build --target api -t $${REGISTRY:-ghcr.io/treytartt}/honeydue-api:$${TAG:-latest} . + docker build --target worker -t $${REGISTRY:-ghcr.io/treytartt}/honeydue-worker:$${TAG:-latest} . + docker build --target admin -t $${REGISTRY:-ghcr.io/treytartt}/honeydue-admin:$${TAG:-latest} . # Database migrations migrate-up: diff --git a/README.md b/README.md index b1bdeef..1a9506f 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ -# Casera API +# honeyDue API -Go REST API for the Casera (MyCrib) property management platform. Powers iOS and Android mobile apps built with Kotlin Multiplatform. +Go REST API for the honeyDue property management platform. Powers iOS and Android mobile apps built with Kotlin Multiplatform. ## Tech Stack @@ -31,7 +31,7 @@ This starts PostgreSQL, Redis, the API server, background worker, and admin pane ```bash # 1. Clone the repo git clone -cd myCribAPI-go +cd honeyDueAPI-go # 2. Create your environment file cp .env.example .env @@ -41,11 +41,11 @@ cp .env.example .env make docker-dev # 4. Seed the database with lookup data (required) -docker exec -i casera-db psql -U casera -d casera < seeds/001_lookups.sql +docker exec -i honeydue-db psql -U honeydue -d honeydue < seeds/001_lookups.sql # 5. (Optional) Seed test data — creates test users, residences, tasks -docker exec -i casera-db psql -U casera -d casera < seeds/002_test_data.sql -docker exec -i casera-db psql -U casera -d casera < seeds/003_task_templates.sql +docker exec -i honeydue-db psql -U honeydue -d honeydue < seeds/002_test_data.sql +docker exec -i honeydue-db psql -U honeydue -d honeydue < seeds/003_task_templates.sql # 6. Verify the API is running curl http://localhost:8000/api/health/ @@ -60,7 +60,7 @@ Use Docker for PostgreSQL and Redis, but run the Go server natively for faster i ```bash # 1. Clone and enter the repo git clone -cd myCribAPI-go +cd honeyDueAPI-go # 2. Install Go dependencies make deps @@ -77,9 +77,9 @@ cp .env.example .env # - Set REDIS_URL=redis://localhost:6379/0 # 5. Seed the database -psql -h localhost -p 5433 -U casera -d casera < seeds/001_lookups.sql -psql -h localhost -p 5433 -U casera -d casera < seeds/002_test_data.sql -psql -h localhost -p 5433 -U casera -d casera < seeds/003_task_templates.sql +psql -h localhost -p 5433 -U honeydue -d honeydue < seeds/001_lookups.sql +psql -h localhost -p 5433 -U honeydue -d honeydue < seeds/002_test_data.sql +psql -h localhost -p 5433 -U honeydue -d honeydue < seeds/003_task_templates.sql # 6. Run the API server make run @@ -101,7 +101,7 @@ brew services start postgresql@16 brew services start redis # Create the database -createdb casera +createdb honeydue # Then follow Option B steps 2-7, using: # DB_HOST=localhost, DB_PORT=5432, POSTGRES_USER=, POSTGRES_PASSWORD= @@ -116,7 +116,7 @@ Copy `.env.example` to `.env` and configure: | `PORT` | Server port | `8000` | No | | `DEBUG` | Enable debug logging | `true` | No | | `SECRET_KEY` | JWT signing secret (32+ chars) | — | **Yes** | -| `POSTGRES_DB` | Database name | `casera` | Yes | +| `POSTGRES_DB` | Database name | `honeydue` | Yes | | `POSTGRES_USER` | Database user | `postgres` | Yes | | `POSTGRES_PASSWORD` | Database password | — | Yes | | `DB_HOST` | Database host | `localhost` | Yes | @@ -133,7 +133,7 @@ Copy `.env.example` to `.env` and configure: ## Project Structure ``` -myCribAPI-go/ +honeyDueAPI-go/ ├── cmd/ │ ├── api/main.go # API server entry point │ └── worker/main.go # Background worker entry point @@ -266,10 +266,10 @@ All protected endpoints require an `Authorization: Token ` header. git push dokku main # Seed lookup data -cat seeds/001_lookups.sql | dokku postgres:connect casera-db +cat seeds/001_lookups.sql | dokku postgres:connect honeydue-db # Check logs -dokku logs casera-api -t +dokku logs honeydue-api -t ``` ### Docker Swarm @@ -277,20 +277,20 @@ dokku logs casera-api -t ```bash # Build and push production images make docker-build-prod -docker push ${REGISTRY}/casera-api:${TAG} -docker push ${REGISTRY}/casera-worker:${TAG} -docker push ${REGISTRY}/casera-admin:${TAG} +docker push ${REGISTRY}/honeydue-api:${TAG} +docker push ${REGISTRY}/honeydue-worker:${TAG} +docker push ${REGISTRY}/honeydue-admin:${TAG} # Deploy the stack (all env vars must be set in .env or environment) -docker stack deploy -c docker-compose.yml casera +docker stack deploy -c docker-compose.yml honeydue ``` ## Related Projects -- **Mobile App (KMM)**: `../MyCribKMM` — Kotlin Multiplatform iOS/Android client +- **Mobile App (KMM)**: `../HoneyDueKMM` — Kotlin Multiplatform iOS/Android client - **Task Logic Docs**: `docs/TASK_LOGIC_ARCHITECTURE.md` — required reading before task-related work - **Push Notification Docs**: `docs/PUSH_NOTIFICATIONS.md` ## License -Proprietary — Casera +Proprietary — honeyDue diff --git a/admin/src/app/(dashboard)/automation-reference/page.tsx b/admin/src/app/(dashboard)/automation-reference/page.tsx index 97d205a..aa39142 100644 --- a/admin/src/app/(dashboard)/automation-reference/page.tsx +++ b/admin/src/app/(dashboard)/automation-reference/page.tsx @@ -239,55 +239,55 @@ export default function AutomationReferencePage() { Welcome Email - Welcome to Casera - Verify Your Email + Welcome to honeyDue - Verify Your Email User registration (email/password) 24 hours (verification code) Apple Welcome - Welcome to Casera! + Welcome to honeyDue! Apple Sign In registration - Google Welcome - Welcome to Casera! + Welcome to honeyDue! Google Sign In registration - Post-Verification - You're All Set! Getting Started with Casera + You're All Set! Getting Started with honeyDue After email verification - Verification Email - Casera - Verify Your Email + honeyDue - Verify Your Email Resend verification code 24 hours Password Reset - Casera - Password Reset Request + honeyDue - Password Reset Request Password reset request 15 minutes Password Changed - Casera - Your Password Has Been Changed + honeyDue - Your Password Has Been Changed After password change - Task Completed - Casera - Task Completed: [Task Title] + honeyDue - Task Completed: [Task Title] When task is completed (if email_task_completed = true) - Tasks Report - Casera - Tasks Report for [Residence] + honeyDue - Tasks Report for [Residence] User requests PDF export - @@ -311,14 +311,14 @@ export default function AutomationReferencePage() { no_residence - Get started with Casera - Add your first property + Get started with honeyDue - Add your first property 2+ days since registration, no residence created no_tasks - Stay on top of home maintenance with Casera + Stay on top of home maintenance with honeyDue 5+ days since first residence, no tasks created diff --git a/admin/src/app/(dashboard)/users/[id]/client.tsx b/admin/src/app/(dashboard)/users/[id]/client.tsx index d1fd55b..9a18929 100644 --- a/admin/src/app/(dashboard)/users/[id]/client.tsx +++ b/admin/src/app/(dashboard)/users/[id]/client.tsx @@ -42,9 +42,9 @@ export function UserDetailClient() { const [showPushDialog, setShowPushDialog] = useState(false); const [showEmailDialog, setShowEmailDialog] = useState(false); const [pushTitle, setPushTitle] = useState('Test Notification'); - const [pushBody, setPushBody] = useState('This is a test push notification from Casera Admin.'); - const [emailSubject, setEmailSubject] = useState('Test Email from Casera'); - const [emailBody, setEmailBody] = useState('This is a test email sent from the Casera Admin Panel.'); + const [pushBody, setPushBody] = useState('This is a test push notification from honeyDue Admin.'); + const [emailSubject, setEmailSubject] = useState('Test Email from honeyDue'); + const [emailBody, setEmailBody] = useState('This is a test email sent from the honeyDue Admin Panel.'); const { data: user, isLoading, error } = useQuery({ queryKey: ['user', userId], diff --git a/admin/src/app/layout.tsx b/admin/src/app/layout.tsx index 8ceee79..24ea7c4 100644 --- a/admin/src/app/layout.tsx +++ b/admin/src/app/layout.tsx @@ -15,8 +15,8 @@ const geistMono = Geist_Mono({ }); export const metadata: Metadata = { - title: "Casera Admin", - description: "Casera Administration Panel", + title: "honeyDue Admin", + description: "honeyDue Administration Panel", }; export default function RootLayout({ diff --git a/admin/src/components/app-sidebar.tsx b/admin/src/components/app-sidebar.tsx index 8a18497..b3cadd8 100644 --- a/admin/src/components/app-sidebar.tsx +++ b/admin/src/components/app-sidebar.tsx @@ -100,7 +100,7 @@ export function AppSidebar() {
- Casera Admin + honeyDue Admin
diff --git a/admin/src/components/login-form.tsx b/admin/src/components/login-form.tsx index d822cbe..8072956 100644 --- a/admin/src/components/login-form.tsx +++ b/admin/src/components/login-form.tsx @@ -34,7 +34,7 @@ export function LoginForm() { - Casera Admin + honeyDue Admin Enter your credentials to access the admin panel @@ -53,7 +53,7 @@ export function LoginForm() { setEmail(e.target.value)} required diff --git a/app.json b/app.json index e2a2ef4..bb916e0 100644 --- a/app.json +++ b/app.json @@ -1,6 +1,6 @@ { - "name": "casera-api", - "description": "Casera API (Go)", + "name": "honeydue-api", + "description": "honeyDue API (Go)", "scripts": {}, "healthchecks": { "web": [ diff --git a/bruno-collections/casera-api/bruno.json b/bruno-collections/casera-api/bruno.json index c1eff48..da0343c 100644 --- a/bruno-collections/casera-api/bruno.json +++ b/bruno-collections/casera-api/bruno.json @@ -1,6 +1,6 @@ { "version": "1", - "name": "Casera API (Go)", + "name": "honeyDue API (Go)", "type": "collection", "ignore": [ "node_modules", diff --git a/bruno-collections/casera-api/environments/Dev.bru b/bruno-collections/casera-api/environments/Dev.bru index 1851f1e..4c72886 100644 --- a/bruno-collections/casera-api/environments/Dev.bru +++ b/bruno-collections/casera-api/environments/Dev.bru @@ -1,5 +1,5 @@ vars { - base_url: https://casera.treytartt.com + base_url: https://honeyDue.treytartt.com api_url: {{base_url}}/api auth_token: 64eea3e59ecdf58a35a4fb45f4797413a3f96456 } diff --git a/cmd/api/main.go b/cmd/api/main.go index c96459a..e04c632 100644 --- a/cmd/api/main.go +++ b/cmd/api/main.go @@ -12,14 +12,14 @@ import ( "github.com/rs/zerolog/log" "gorm.io/gorm" - "github.com/treytartt/casera-api/internal/config" - "github.com/treytartt/casera-api/internal/database" - "github.com/treytartt/casera-api/internal/i18n" - "github.com/treytartt/casera-api/internal/monitoring" - "github.com/treytartt/casera-api/internal/push" - "github.com/treytartt/casera-api/internal/router" - "github.com/treytartt/casera-api/internal/services" - "github.com/treytartt/casera-api/pkg/utils" + "github.com/treytartt/honeydue-api/internal/config" + "github.com/treytartt/honeydue-api/internal/database" + "github.com/treytartt/honeydue-api/internal/i18n" + "github.com/treytartt/honeydue-api/internal/monitoring" + "github.com/treytartt/honeydue-api/internal/push" + "github.com/treytartt/honeydue-api/internal/router" + "github.com/treytartt/honeydue-api/internal/services" + "github.com/treytartt/honeydue-api/pkg/utils" ) func main() { @@ -48,7 +48,7 @@ func main() { Str("db_name", cfg.Database.Database). Str("db_user", cfg.Database.User). Str("redis_url", cfg.Redis.URL). - Msg("Starting MyCrib API server") + Msg("Starting HoneyDue API server") // Connect to database (retry with backoff) var db *gorm.DB diff --git a/cmd/worker/main.go b/cmd/worker/main.go index 06f8a4a..56a881d 100644 --- a/cmd/worker/main.go +++ b/cmd/worker/main.go @@ -11,14 +11,14 @@ import ( "github.com/redis/go-redis/v9" "github.com/rs/zerolog/log" - "github.com/treytartt/casera-api/internal/config" - "github.com/treytartt/casera-api/internal/database" - "github.com/treytartt/casera-api/internal/monitoring" - "github.com/treytartt/casera-api/internal/push" - "github.com/treytartt/casera-api/internal/repositories" - "github.com/treytartt/casera-api/internal/services" - "github.com/treytartt/casera-api/internal/worker/jobs" - "github.com/treytartt/casera-api/pkg/utils" + "github.com/treytartt/honeydue-api/internal/config" + "github.com/treytartt/honeydue-api/internal/database" + "github.com/treytartt/honeydue-api/internal/monitoring" + "github.com/treytartt/honeydue-api/internal/push" + "github.com/treytartt/honeydue-api/internal/repositories" + "github.com/treytartt/honeydue-api/internal/services" + "github.com/treytartt/honeydue-api/internal/worker/jobs" + "github.com/treytartt/honeydue-api/pkg/utils" ) func main() { diff --git a/deploy/README.md b/deploy/README.md index 3cdcd54..366ea43 100644 --- a/deploy/README.md +++ b/deploy/README.md @@ -1,6 +1,6 @@ # Deploy Folder -This folder is the full production deploy toolkit for `myCribAPI-go`. +This folder is the full production deploy toolkit for `honeyDueAPI-go`. Run deploy with: diff --git a/deploy/cluster.env.example b/deploy/cluster.env.example index a0202ef..1caeb79 100644 --- a/deploy/cluster.env.example +++ b/deploy/cluster.env.example @@ -5,10 +5,10 @@ DEPLOY_MANAGER_SSH_PORT=22 DEPLOY_SSH_KEY_PATH=~/.ssh/id_ed25519 # Stack settings -DEPLOY_STACK_NAME=casera -DEPLOY_REMOTE_DIR=/opt/casera/deploy +DEPLOY_STACK_NAME=honeydue +DEPLOY_REMOTE_DIR=/opt/honeydue/deploy DEPLOY_WAIT_SECONDS=420 -DEPLOY_HEALTHCHECK_URL=https://api.casera.app/api/health/ +DEPLOY_HEALTHCHECK_URL=https://api.honeyDue.treytartt.com/api/health/ # Replicas and published ports API_REPLICAS=3 diff --git a/deploy/prod.env.example b/deploy/prod.env.example index 68ab21b..cb8a310 100644 --- a/deploy/prod.env.example +++ b/deploy/prod.env.example @@ -1,20 +1,20 @@ # API service settings DEBUG=false -ALLOWED_HOSTS=api.casera.app,casera.app -CORS_ALLOWED_ORIGINS=https://casera.app,https://admin.casera.app +ALLOWED_HOSTS=api.honeyDue.treytartt.com,honeyDue.treytartt.com +CORS_ALLOWED_ORIGINS=https://honeyDue.treytartt.com,https://admin.honeyDue.treytartt.com TIMEZONE=UTC -BASE_URL=https://casera.app +BASE_URL=https://honeyDue.treytartt.com PORT=8000 # Admin service settings -NEXT_PUBLIC_API_URL=https://api.casera.app -ADMIN_PANEL_URL=https://admin.casera.app +NEXT_PUBLIC_API_URL=https://api.honeyDue.treytartt.com +ADMIN_PANEL_URL=https://admin.honeyDue.treytartt.com # Database (Neon recommended) DB_HOST=CHANGEME_NEON_HOST DB_PORT=5432 POSTGRES_USER=CHANGEME_DB_USER -POSTGRES_DB=casera +POSTGRES_DB=honeydue DB_SSLMODE=require DB_MAX_OPEN_CONNS=25 DB_MAX_IDLE_CONNS=10 @@ -29,13 +29,13 @@ EMAIL_HOST=smtp.gmail.com EMAIL_PORT=587 EMAIL_USE_TLS=true EMAIL_HOST_USER=CHANGEME_EMAIL_USER -DEFAULT_FROM_EMAIL=Casera +DEFAULT_FROM_EMAIL=honeyDue # Push notifications # APNS private key goes in deploy/secrets/apns_auth_key.p8 APNS_AUTH_KEY_ID=CHANGEME_APNS_KEY_ID APNS_TEAM_ID=CHANGEME_APNS_TEAM_ID -APNS_TOPIC=com.tt.casera +APNS_TOPIC=com.tt.honeyDue APNS_USE_SANDBOX=false APNS_PRODUCTION=true diff --git a/deploy/scripts/deploy_prod.sh b/deploy/scripts/deploy_prod.sh index f862f85..f2cf698 100755 --- a/deploy/scripts/deploy_prod.sh +++ b/deploy/scripts/deploy_prod.sh @@ -140,8 +140,8 @@ source "${PROD_ENV}" set +a DEPLOY_MANAGER_SSH_PORT="${DEPLOY_MANAGER_SSH_PORT:-22}" -DEPLOY_STACK_NAME="${DEPLOY_STACK_NAME:-casera}" -DEPLOY_REMOTE_DIR="${DEPLOY_REMOTE_DIR:-/opt/casera/deploy}" +DEPLOY_STACK_NAME="${DEPLOY_STACK_NAME:-honeydue}" +DEPLOY_REMOTE_DIR="${DEPLOY_REMOTE_DIR:-/opt/honeydue/deploy}" DEPLOY_WAIT_SECONDS="${DEPLOY_WAIT_SECONDS:-420}" DEPLOY_TAG="${DEPLOY_TAG:-$(git -C "${REPO_DIR}" rev-parse --short HEAD)}" PUSH_LATEST_TAG="${PUSH_LATEST_TAG:-true}" @@ -183,9 +183,9 @@ if (( app_secret_len < 32 )); then fi REGISTRY_PREFIX="${REGISTRY%/}/${REGISTRY_NAMESPACE#/}" -API_IMAGE="${REGISTRY_PREFIX}/casera-api:${DEPLOY_TAG}" -WORKER_IMAGE="${REGISTRY_PREFIX}/casera-worker:${DEPLOY_TAG}" -ADMIN_IMAGE="${REGISTRY_PREFIX}/casera-admin:${DEPLOY_TAG}" +API_IMAGE="${REGISTRY_PREFIX}/honeydue-api:${DEPLOY_TAG}" +WORKER_IMAGE="${REGISTRY_PREFIX}/honeydue-worker:${DEPLOY_TAG}" +ADMIN_IMAGE="${REGISTRY_PREFIX}/honeydue-admin:${DEPLOY_TAG}" SSH_KEY_PATH="${DEPLOY_SSH_KEY_PATH:-}" if [[ -n "${SSH_KEY_PATH}" ]]; then @@ -232,12 +232,12 @@ if [[ "${SKIP_BUILD}" != "1" ]]; then if [[ "${PUSH_LATEST_TAG}" == "true" ]]; then log "Updating :latest tags" - docker tag "${API_IMAGE}" "${REGISTRY_PREFIX}/casera-api:latest" - docker tag "${WORKER_IMAGE}" "${REGISTRY_PREFIX}/casera-worker:latest" - docker tag "${ADMIN_IMAGE}" "${REGISTRY_PREFIX}/casera-admin:latest" - docker push "${REGISTRY_PREFIX}/casera-api:latest" - docker push "${REGISTRY_PREFIX}/casera-worker:latest" - docker push "${REGISTRY_PREFIX}/casera-admin:latest" + docker tag "${API_IMAGE}" "${REGISTRY_PREFIX}/honeydue-api:latest" + docker tag "${WORKER_IMAGE}" "${REGISTRY_PREFIX}/honeydue-worker:latest" + docker tag "${ADMIN_IMAGE}" "${REGISTRY_PREFIX}/honeydue-admin:latest" + docker push "${REGISTRY_PREFIX}/honeydue-api:latest" + docker push "${REGISTRY_PREFIX}/honeydue-worker:latest" + docker push "${REGISTRY_PREFIX}/honeydue-admin:latest" fi else warn "SKIP_BUILD=1 set. Using prebuilt images for tag: ${DEPLOY_TAG}" diff --git a/deploy/swarm-stack.prod.yml b/deploy/swarm-stack.prod.yml index b4b2a06..bdb6c32 100644 --- a/deploy/swarm-stack.prod.yml +++ b/deploy/swarm-stack.prod.yml @@ -19,7 +19,7 @@ services: placement: max_replicas_per_node: 1 networks: - - casera-network + - honeydue-network api: image: ${API_IMAGE} @@ -129,7 +129,7 @@ services: delay: 5s order: stop-first networks: - - casera-network + - honeydue-network admin: image: ${ADMIN_IMAGE} @@ -161,7 +161,7 @@ services: delay: 5s order: stop-first networks: - - casera-network + - honeydue-network worker: image: ${WORKER_IMAGE} @@ -236,7 +236,7 @@ services: delay: 5s order: stop-first networks: - - casera-network + - honeydue-network dozzle: image: amir20/dozzle:latest @@ -258,14 +258,14 @@ services: constraints: - node.role == manager networks: - - casera-network + - honeydue-network volumes: redis_data: uploads: networks: - casera-network: + honeydue-network: driver: overlay driver_opts: encrypted: "true" diff --git a/dev.sh b/dev.sh index ea8ccb4..3b4412e 100755 --- a/dev.sh +++ b/dev.sh @@ -1,5 +1,5 @@ #!/bin/bash -# Development helper script for MyCrib API (Go) +# Development helper script for HoneyDue API (Go) set -e @@ -67,7 +67,7 @@ case "$1" in ;; db) echo "🐘 Connecting to PostgreSQL..." - docker-compose $COMPOSE_FILES exec db psql -U ${POSTGRES_USER:-mycrib} -d ${POSTGRES_DB:-mycrib} + docker-compose $COMPOSE_FILES exec db psql -U ${POSTGRES_USER:-honeydue} -d ${POSTGRES_DB:-honeydue} ;; redis) echo "📮 Connecting to Redis..." @@ -75,23 +75,23 @@ case "$1" in ;; seed) echo "🌱 Seeding lookup data..." - docker-compose $COMPOSE_FILES exec -T db psql -U ${POSTGRES_USER:-postgres} -d ${POSTGRES_DB:-mycrib} -f - < seeds/001_lookups.sql + docker-compose $COMPOSE_FILES exec -T db psql -U ${POSTGRES_USER:-postgres} -d ${POSTGRES_DB:-honeydue} -f - < seeds/001_lookups.sql echo "✅ Lookup data seeded" ;; seed-test) echo "🧪 Seeding test data..." - docker-compose $COMPOSE_FILES exec -T db psql -U ${POSTGRES_USER:-postgres} -d ${POSTGRES_DB:-mycrib} -f - < seeds/002_test_data.sql + docker-compose $COMPOSE_FILES exec -T db psql -U ${POSTGRES_USER:-postgres} -d ${POSTGRES_DB:-honeydue} -f - < seeds/002_test_data.sql echo "✅ Test data seeded" ;; seed-all) echo "🌱 Seeding all data..." - docker-compose $COMPOSE_FILES exec -T db psql -U ${POSTGRES_USER:-postgres} -d ${POSTGRES_DB:-mycrib} -f - < seeds/001_lookups.sql - docker-compose $COMPOSE_FILES exec -T db psql -U ${POSTGRES_USER:-postgres} -d ${POSTGRES_DB:-mycrib} -f - < seeds/002_test_data.sql + docker-compose $COMPOSE_FILES exec -T db psql -U ${POSTGRES_USER:-postgres} -d ${POSTGRES_DB:-honeydue} -f - < seeds/001_lookups.sql + docker-compose $COMPOSE_FILES exec -T db psql -U ${POSTGRES_USER:-postgres} -d ${POSTGRES_DB:-honeydue} -f - < seeds/002_test_data.sql echo "✅ All data seeded" ;; seed-admin) echo "🔐 Seeding admin user..." - docker-compose $COMPOSE_FILES exec -T db psql -U ${POSTGRES_USER:-postgres} -d ${POSTGRES_DB:-mycrib} -f - < seeds/003_admin_user.sql + docker-compose $COMPOSE_FILES exec -T db psql -U ${POSTGRES_USER:-postgres} -d ${POSTGRES_DB:-honeydue} -f - < seeds/003_admin_user.sql echo "✅ Admin user seeded" ;; admin-install) @@ -115,7 +115,7 @@ case "$1" in migrate) echo "📊 Running database migrations..." # GORM auto-migrates on API startup, but we need GoAdmin tables - docker-compose $COMPOSE_FILES exec -T db psql -U ${POSTGRES_USER:-postgres} -d ${POSTGRES_DB:-mycrib} -f - < migrations/002_goadmin_tables.up.sql + docker-compose $COMPOSE_FILES exec -T db psql -U ${POSTGRES_USER:-postgres} -d ${POSTGRES_DB:-honeydue} -f - < migrations/002_goadmin_tables.up.sql echo "✅ Migrations complete" ;; clean) @@ -134,7 +134,7 @@ case "$1" in echo "🚀 Starting development environment..." docker-compose $COMPOSE_FILES up else - echo "Development helper script for MyCrib API (Go)" + echo "Development helper script for HoneyDue API (Go)" echo "" echo "Usage: ./dev.sh [command]" echo "" diff --git a/docker-compose.dev.yml b/docker-compose.dev.yml index fd38a55..51b12ef 100644 --- a/docker-compose.dev.yml +++ b/docker-compose.dev.yml @@ -6,28 +6,28 @@ services: # PostgreSQL Database db: image: postgres:16-alpine - container_name: casera-db + container_name: honeydue-db restart: unless-stopped environment: - POSTGRES_USER: ${POSTGRES_USER:-casera} - POSTGRES_PASSWORD: ${POSTGRES_PASSWORD:-casera_dev_password} - POSTGRES_DB: ${POSTGRES_DB:-casera} + POSTGRES_USER: ${POSTGRES_USER:-honeydue} + POSTGRES_PASSWORD: ${POSTGRES_PASSWORD:-honeydue_dev_password} + POSTGRES_DB: ${POSTGRES_DB:-honeydue} volumes: - postgres_data:/var/lib/postgresql/data ports: - "${DB_PORT:-5433}:5432" # 5433 externally to avoid conflicts with local postgres healthcheck: - test: ["CMD-SHELL", "pg_isready -U ${POSTGRES_USER:-casera} -d ${POSTGRES_DB:-casera}"] + test: ["CMD-SHELL", "pg_isready -U ${POSTGRES_USER:-honeydue} -d ${POSTGRES_DB:-honeydue}"] interval: 10s timeout: 5s retries: 5 networks: - - casera-network + - honeydue-network # Redis Cache redis: image: redis:7-alpine - container_name: casera-redis + container_name: honeydue-redis restart: unless-stopped command: redis-server --appendonly yes volumes: @@ -40,14 +40,14 @@ services: timeout: 5s retries: 5 networks: - - casera-network + - honeydue-network - # Casera API + # honeyDue API api: build: context: . target: api - container_name: casera-api + container_name: honeydue-api restart: unless-stopped ports: - "${PORT:-8000}:8000" @@ -61,9 +61,9 @@ services: # Database DB_HOST: db DB_PORT: "5432" - POSTGRES_USER: ${POSTGRES_USER:-casera} - POSTGRES_PASSWORD: ${POSTGRES_PASSWORD:-casera_dev_password} - POSTGRES_DB: ${POSTGRES_DB:-casera} + POSTGRES_USER: ${POSTGRES_USER:-honeydue} + POSTGRES_PASSWORD: ${POSTGRES_PASSWORD:-honeydue_dev_password} + POSTGRES_DB: ${POSTGRES_DB:-honeydue} DB_SSLMODE: "disable" # Redis @@ -77,14 +77,14 @@ services: EMAIL_PORT: ${EMAIL_PORT:-587} EMAIL_HOST_USER: ${EMAIL_HOST_USER} EMAIL_HOST_PASSWORD: ${EMAIL_HOST_PASSWORD} - DEFAULT_FROM_EMAIL: ${DEFAULT_FROM_EMAIL:-Casera } + DEFAULT_FROM_EMAIL: ${DEFAULT_FROM_EMAIL:-honeyDue } EMAIL_USE_TLS: "true" # Push Notifications APNS_AUTH_KEY_PATH: ${APNS_AUTH_KEY_PATH} APNS_AUTH_KEY_ID: ${APNS_AUTH_KEY_ID} APNS_TEAM_ID: ${APNS_TEAM_ID} - APNS_TOPIC: ${APNS_TOPIC:-com.example.casera} + APNS_TOPIC: ${APNS_TOPIC:-com.tt.honeyDue} APNS_USE_SANDBOX: "true" FCM_SERVER_KEY: ${FCM_SERVER_KEY} volumes: @@ -102,14 +102,14 @@ services: start_period: 10s retries: 3 networks: - - casera-network + - honeydue-network - # Casera Admin Panel (Next.js) + # honeyDue Admin Panel (Next.js) admin: build: context: . target: admin - container_name: casera-admin + container_name: honeydue-admin restart: unless-stopped ports: - "${ADMIN_PORT:-3000}:3000" @@ -126,22 +126,22 @@ services: timeout: 10s retries: 3 networks: - - casera-network + - honeydue-network - # Casera Worker (Background Jobs) + # honeyDue Worker (Background Jobs) worker: build: context: . target: worker - container_name: casera-worker + container_name: honeydue-worker restart: unless-stopped environment: # Database DB_HOST: db DB_PORT: "5432" - POSTGRES_USER: ${POSTGRES_USER:-casera} - POSTGRES_PASSWORD: ${POSTGRES_PASSWORD:-casera_dev_password} - POSTGRES_DB: ${POSTGRES_DB:-casera} + POSTGRES_USER: ${POSTGRES_USER:-honeydue} + POSTGRES_PASSWORD: ${POSTGRES_PASSWORD:-honeydue_dev_password} + POSTGRES_DB: ${POSTGRES_DB:-honeydue} DB_SSLMODE: "disable" # Redis @@ -154,7 +154,7 @@ services: APNS_AUTH_KEY_PATH: "/certs/apns_key.p8" APNS_AUTH_KEY_ID: ${APNS_AUTH_KEY_ID} APNS_TEAM_ID: ${APNS_TEAM_ID} - APNS_TOPIC: ${APNS_TOPIC:-com.example.casera} + APNS_TOPIC: ${APNS_TOPIC:-com.tt.honeyDue} APNS_USE_SANDBOX: "true" FCM_SERVER_KEY: ${FCM_SERVER_KEY} @@ -163,7 +163,7 @@ services: EMAIL_PORT: ${EMAIL_PORT:-587} EMAIL_HOST_USER: ${EMAIL_HOST_USER} EMAIL_HOST_PASSWORD: ${EMAIL_HOST_PASSWORD} - DEFAULT_FROM_EMAIL: ${DEFAULT_FROM_EMAIL:-Casera } + DEFAULT_FROM_EMAIL: ${DEFAULT_FROM_EMAIL:-honeyDue } EMAIL_USE_TLS: "true" # Worker settings (UTC hours for scheduled jobs) @@ -178,12 +178,12 @@ services: redis: condition: service_healthy networks: - - casera-network + - honeydue-network # Dozzle — lightweight real-time log viewer dozzle: image: amir20/dozzle:latest - container_name: casera-dozzle + container_name: honeydue-dozzle restart: unless-stopped ports: - "${DOZZLE_PORT:-9999}:8080" @@ -192,12 +192,12 @@ services: volumes: - /var/run/docker.sock:/var/run/docker.sock:ro networks: - - casera-network + - honeydue-network volumes: postgres_data: redis_data: networks: - casera-network: + honeydue-network: driver: bridge diff --git a/docker-compose.yml b/docker-compose.yml index 4f69c20..88ce2e2 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -1,6 +1,6 @@ # Production / Docker Swarm compose file # Usage: -# docker stack deploy -c docker-compose.yml casera +# docker stack deploy -c docker-compose.yml honeydue # # All env vars must be set in the environment or a .env file. # No dev-safe defaults — missing vars will fail the deploy. @@ -30,7 +30,7 @@ services: parallelism: 1 delay: 10s networks: - - casera-network + - honeydue-network # Redis Cache redis: @@ -50,11 +50,11 @@ services: condition: any delay: 5s networks: - - casera-network + - honeydue-network - # Casera API + # honeyDue API api: - image: ${REGISTRY:-ghcr.io/treytartt}/casera-api:${TAG:-latest} + image: ${REGISTRY:-ghcr.io/treytartt}/honeydue-api:${TAG:-latest} ports: - "${PORT:-8000}:8000" environment: @@ -113,11 +113,11 @@ services: delay: 10s order: start-first networks: - - casera-network + - honeydue-network - # Casera Admin Panel (Next.js) + # honeyDue Admin Panel (Next.js) admin: - image: ${REGISTRY:-ghcr.io/treytartt}/casera-admin:${TAG:-latest} + image: ${REGISTRY:-ghcr.io/treytartt}/honeydue-admin:${TAG:-latest} ports: - "${ADMIN_PORT:-3000}:3000" environment: @@ -139,11 +139,11 @@ services: delay: 10s order: start-first networks: - - casera-network + - honeydue-network - # Casera Worker (Background Jobs) + # honeyDue Worker (Background Jobs) worker: - image: ${REGISTRY:-ghcr.io/treytartt}/casera-worker:${TAG:-latest} + image: ${REGISTRY:-ghcr.io/treytartt}/honeydue-worker:${TAG:-latest} environment: # Database DB_HOST: db @@ -187,7 +187,7 @@ services: condition: any delay: 5s networks: - - casera-network + - honeydue-network # Dozzle — lightweight real-time log viewer dozzle: @@ -207,7 +207,7 @@ services: constraints: - node.role == manager networks: - - casera-network + - honeydue-network volumes: postgres_data: @@ -216,5 +216,5 @@ volumes: uploads: networks: - casera-network: + honeydue-network: driver: overlay diff --git a/docs/AUDIT_FINDINGS.md b/docs/AUDIT_FINDINGS.md index ddb9746..e6d26b5 100644 --- a/docs/AUDIT_FINDINGS.md +++ b/docs/AUDIT_FINDINGS.md @@ -1,7 +1,7 @@ -# MyCrib Go Backend — Deep Audit Findings +# HoneyDue Go Backend — Deep Audit Findings **Date**: 2026-03-01 -**Scope**: All non-test `.go` files under `myCribAPI-go/` +**Scope**: All non-test `.go` files under `honeyDueAPI-go/` **Agents**: 9 parallel audit agents covering security, authorization, data integrity, concurrency, performance, error handling, architecture compliance, API contracts, and cross-cutting logic --- @@ -42,7 +42,7 @@ ### SEC-04 | CRITICAL | Next.js admin password reset to "admin123" on every migration - **File**: `internal/database/database.go:447-463` -- **What**: Lines 458-463 unconditionally update the admin@mycrib.com password to the bcrypt hash of "admin123" on every migration. The log message on line 463 even says "Updated admin@mycrib.com password to admin123." +- **What**: Lines 458-463 unconditionally update the admin@honeydue.com password to the bcrypt hash of "admin123" on every migration. The log message on line 463 even says "Updated admin@honeydue.com password to admin123." - **Impact**: The admin API is permanently accessible with hardcoded credentials. Any attacker who discovers the endpoint can access full admin functionality. ### SEC-05 | CRITICAL | SQL injection via SortBy in all admin list endpoints @@ -236,7 +236,7 @@ ### AUTH-06 | CRITICAL | Hardcoded admin credentials reset on every migration - **File**: `internal/database/database.go:372-382,447-463` -- **What**: Hardcoded admin credentials (`admin@mycrib.com` / `admin123` and GoAdmin password of `admin`) are re-applied on every server restart/migration, overwriting any password changes. +- **What**: Hardcoded admin credentials (`admin@honeydue.com` / `admin123` and GoAdmin password of `admin`) are re-applied on every server restart/migration, overwriting any password changes. - **Impact**: If these endpoints are accessible in production, any attacker with knowledge of these default credentials can gain full admin access. ### AUTH-07 | BUG | User-controlled category parameter enables storage path manipulation @@ -350,7 +350,7 @@ ### DATA-07 | CRITICAL | Next.js admin password reset on every migration run - **File**: `internal/database/database.go:458-463` -- **What**: Unconditionally updates admin@mycrib.com password to "admin123" on every migration. +- **What**: Unconditionally updates admin@honeydue.com password to "admin123" on every migration. - **Impact**: Same persistent backdoor. ### DATA-08 | BUG | GetAllUsers/HasAccess silently wrong when associations not preloaded diff --git a/docs/DOKKU_SETUP.md b/docs/DOKKU_SETUP.md index 7cbb5f4..c0aff68 100644 --- a/docs/DOKKU_SETUP.md +++ b/docs/DOKKU_SETUP.md @@ -1,6 +1,6 @@ -# Dokku Deployment Guide for Casera API +# Dokku Deployment Guide for honeyDue API -This guide provides step-by-step instructions for deploying the Casera Go API to a remote server using Dokku. +This guide provides step-by-step instructions for deploying the honeyDue Go API to a remote server using Dokku. ## Table of Contents @@ -90,7 +90,7 @@ sudo DOKKU_TAG=v0.34.4 bash bootstrap.sh ```bash # Set your domain (replace with your actual domain) -dokku domains:set-global casera.treytartt.com +dokku domains:set-global honeyDue.treytartt.com # Add your SSH public key for deployments # Run this from your LOCAL machine: @@ -117,13 +117,13 @@ dokku plugin:install https://github.com/dokku/dokku-letsencrypt.git ### 1. Create the Dokku App ```bash -dokku apps:create casera-api +dokku apps:create honeydue-api ``` ### 2. Set the Domain ```bash -dokku domains:add casera-api api.casera.treytartt.com +dokku domains:add honeydue-api api.honeyDue.treytartt.com ``` ### 3. Configure Buildpack (if needed) @@ -131,8 +131,8 @@ dokku domains:add casera-api api.casera.treytartt.com The app uses a Dockerfile, so Dokku will auto-detect it. If you need to force Docker builds: ```bash -dokku builder:set casera-api build-dir . -dokku builder-dockerfile:set casera-api dockerfile-path Dockerfile +dokku builder:set honeydue-api build-dir . +dokku builder-dockerfile:set honeydue-api dockerfile-path Dockerfile ``` --- @@ -143,20 +143,20 @@ dokku builder-dockerfile:set casera-api dockerfile-path Dockerfile ```bash # Create the database service -dokku postgres:create casera-db +dokku postgres:create honeydue-db # Link to the app (automatically sets DATABASE_URL) -dokku postgres:link casera-db casera-api +dokku postgres:link honeydue-db honeydue-api ``` ### 2. Verify Connection ```bash # Check the connection info -dokku postgres:info casera-db +dokku postgres:info honeydue-db # Connect to the database -dokku postgres:connect casera-db +dokku postgres:connect honeydue-db ``` ### 3. Set Individual Database Variables @@ -165,13 +165,13 @@ Dokku sets `DATABASE_URL` automatically, but the app expects individual variable ```bash # Get the database credentials -dokku postgres:info casera-db +dokku postgres:info honeydue-db # Set individual variables (replace with actual values from info command) -dokku config:set casera-api \ - DB_HOST=dokku-postgres-casera-db \ +dokku config:set honeydue-api \ + DB_HOST=dokku-postgres-honeydue-db \ DB_PORT=5432 \ - POSTGRES_DB=casera_db \ + POSTGRES_DB=honeydue_db \ POSTGRES_USER=postgres \ POSTGRES_PASSWORD=1mJPfu6rzG9r6xukcGbUOU5NoCg0jKfa ``` @@ -184,16 +184,16 @@ dokku config:set casera-api \ ```bash # Create the Redis service -dokku redis:create casera-redis +dokku redis:create honeydue-redis # Link to the app (automatically sets REDIS_URL) -dokku redis:link casera-redis casera-api +dokku redis:link honeydue-redis honeydue-api ``` ### 2. Verify Connection ```bash -dokku redis:info casera-redis +dokku redis:info honeydue-redis ``` --- @@ -203,10 +203,10 @@ dokku redis:info casera-redis ### 1. Required Variables ```bash -dokku config:set casera-api \ +dokku config:set honeydue-api \ PORT=5000 \ DEBUG=false \ - ALLOWED_HOSTS=api.casera.treytartt.com,localhost \ + ALLOWED_HOSTS=api.honeyDue.treytartt.com,localhost \ TIMEZONE=UTC \ SECRET_KEY=8553813eda361017a02677ed504abdd331537cfe6f7cc407345f037cc22c75fc ``` @@ -214,20 +214,20 @@ dokku config:set casera-api \ ### 2. Email Configuration ```bash -dokku config:set casera-api \ +dokku config:set honeydue-api \ EMAIL_HOST=smtp.fastmail.com \ EMAIL_PORT=587 \ EMAIL_USE_TLS=true \ EMAIL_HOST_USER=treytartt@fastmail.com \ EMAIL_HOST_PASSWORD=2t9y4n4t497z5863 \ - DEFAULT_FROM_EMAIL="Casera " + DEFAULT_FROM_EMAIL="honeyDue " ``` ### 3. Apple Sign In (Optional) ```bash -dokku config:set casera-api \ - APPLE_CLIENT_ID=com.tt.casera.CaseraDev \ +dokku config:set honeydue-api \ + APPLE_CLIENT_ID=com.tt.honeyDue.honeyDueDev \ APPLE_TEAM_ID=V3PF3M6B6U ``` @@ -236,11 +236,11 @@ dokku config:set casera-api \ The API uses direct APNs/FCM connections (no external push server needed): ```bash -dokku config:set casera-api \ +dokku config:set honeydue-api \ APNS_AUTH_KEY_PATH=/push_certs/AuthKey_R9N3SM2WD5.p8 \ APNS_AUTH_KEY_ID=R9N3SM2WD5 \ APNS_TEAM_ID=V3PF3M6B6U \ - APNS_TOPIC=com.tt.casera.CaseraDev \ + APNS_TOPIC=com.tt.honeyDue.honeyDueDev \ APNS_PRODUCTION=true \ FCM_SERVER_KEY=your-firebase-server-key ``` @@ -248,14 +248,14 @@ dokku config:set casera-api \ ### 5. Admin Panel URL ```bash -dokku config:set casera-api \ - NEXT_PUBLIC_API_URL=https://api.casera.treytartt.com +dokku config:set honeydue-api \ + NEXT_PUBLIC_API_URL=https://api.honeyDue.treytartt.com ``` ### 6. View All Configuration ```bash -dokku config:show casera-api +dokku config:show honeydue-api ``` --- @@ -266,16 +266,16 @@ dokku config:show casera-api ```bash # Create storage directory on host -mkdir -p /var/lib/dokku/data/storage/casera-api/uploads +mkdir -p /var/lib/dokku/data/storage/honeydue-api/uploads # Set permissions -chown -R 32767:32767 /var/lib/dokku/data/storage/casera-api +chown -R 32767:32767 /var/lib/dokku/data/storage/honeydue-api ``` ### 2. Mount Storage to App ```bash -dokku storage:mount casera-api /var/lib/dokku/data/storage/casera-api/uploads:/app/uploads +dokku storage:mount honeydue-api /var/lib/dokku/data/storage/honeydue-api/uploads:/app/uploads ``` --- @@ -285,8 +285,8 @@ dokku storage:mount casera-api /var/lib/dokku/data/storage/casera-api/uploads:/a ### 1. Add Dokku Remote (Local Machine) ```bash -cd /path/to/myCribAPI-go -git remote add dokku dokku@your-server-ip:casera-api +cd /path/to/honeyDueAPI-go +git remote add dokku dokku@your-server-ip:honeydue-api ``` ### 2. Deploy @@ -301,17 +301,17 @@ git push dokku main ```bash # On server -dokku logs casera-api -t +dokku logs honeydue-api -t ``` ### 4. Verify Deployment ```bash # Check app status -dokku ps:report casera-api +dokku ps:report honeydue-api # Check app is running -curl https://api.casera.treytartt.com/api/health/ +curl https://api.honeyDue.treytartt.com/api/health/ ``` --- @@ -321,13 +321,13 @@ curl https://api.casera.treytartt.com/api/health/ ### 1. Set Let's Encrypt Email ```bash -dokku letsencrypt:set casera-api email admin@treytartt.com +dokku letsencrypt:set honeydue-api email admin@treytartt.com ``` ### 2. Enable Let's Encrypt ```bash -dokku letsencrypt:enable casera-api +dokku letsencrypt:enable honeydue-api ``` ### 3. Set Up Auto-Renewal @@ -345,7 +345,7 @@ The worker process handles background jobs (task reminders, overdue alerts, dail ### 1. Configure Worker Environment Variables ```bash -dokku config:set casera-api \ +dokku config:set honeydue-api \ TASK_REMINDER_HOUR=20 \ TASK_REMINDER_MINUTE=0 \ OVERDUE_REMINDER_HOUR=9 \ @@ -364,17 +364,17 @@ dokku config:set casera-api \ ```bash # Scale to 1 worker -dokku ps:scale casera-api worker=1 +dokku ps:scale honeydue-api worker=1 # Verify processes -dokku ps:report casera-api +dokku ps:report honeydue-api ``` ### 3. Verify Worker is Running ```bash # Check worker logs -dokku logs casera-api -p worker +dokku logs honeydue-api -p worker # Should see: # "Registered task reminder job" @@ -391,33 +391,33 @@ dokku logs casera-api -p worker ```bash # Real-time logs -dokku logs casera-api -t +dokku logs honeydue-api -t # Last 100 lines -dokku logs casera-api -n 100 +dokku logs honeydue-api -n 100 # Worker logs -dokku logs casera-api -p worker +dokku logs honeydue-api -p worker ``` ### Database Operations ```bash # Connect to database -dokku postgres:connect casera-db +dokku postgres:connect honeydue-db # Export database backup -dokku postgres:export casera-db > backup.sql +dokku postgres:export honeydue-db > backup.sql # Import database backup -dokku postgres:import casera-db < backup.sql +dokku postgres:import honeydue-db < backup.sql ``` ### Run Migrations Manually ```bash # Enter the app container -dokku enter casera-api web +dokku enter honeydue-api web # Migrations run automatically on startup, but if needed: /app/api migrate @@ -426,24 +426,24 @@ dokku enter casera-api web ### Restart App ```bash -dokku ps:restart casera-api +dokku ps:restart honeydue-api ``` ### Scale App ```bash # Scale web process -dokku ps:scale casera-api web=2 worker=1 +dokku ps:scale honeydue-api web=2 worker=1 # View current scale -dokku ps:report casera-api +dokku ps:report honeydue-api ``` ### Stop/Start App ```bash -dokku ps:stop casera-api -dokku ps:start casera-api +dokku ps:stop honeydue-api +dokku ps:start honeydue-api ``` --- @@ -453,8 +453,8 @@ dokku ps:start casera-api ### Check App Status ```bash -dokku ps:report casera-api -dokku logs casera-api -n 200 +dokku ps:report honeydue-api +dokku logs honeydue-api -n 200 ``` ### Common Issues @@ -463,47 +463,47 @@ dokku logs casera-api -n 200 ```bash # Check logs for errors -dokku logs casera-api -n 500 +dokku logs honeydue-api -n 500 # Verify environment variables -dokku config:show casera-api +dokku config:show honeydue-api # Check if ports are available -dokku proxy:ports casera-api +dokku proxy:ports honeydue-api ``` #### 2. Database Connection Failed ```bash # Verify link -dokku postgres:linked casera-api casera-db +dokku postgres:linked honeydue-api honeydue-db # Check database is running -dokku postgres:info casera-db +dokku postgres:info honeydue-db # Re-link if needed -dokku postgres:unlink casera-db casera-api -dokku postgres:link casera-db casera-api +dokku postgres:unlink honeydue-db honeydue-api +dokku postgres:link honeydue-db honeydue-api ``` #### 3. Redis Connection Failed ```bash # Verify link -dokku redis:linked casera-api casera-redis +dokku redis:linked honeydue-api honeydue-redis # Check Redis is running -dokku redis:info casera-redis +dokku redis:info honeydue-redis ``` #### 4. Storage/Upload Issues ```bash # Check mounts -dokku storage:report casera-api +dokku storage:report honeydue-api # Verify permissions -ls -la /var/lib/dokku/data/storage/casera-api/ +ls -la /var/lib/dokku/data/storage/honeydue-api/ ``` #### 5. SSL Certificate Issues @@ -513,7 +513,7 @@ ls -la /var/lib/dokku/data/storage/casera-api/ dokku letsencrypt:list # Renew manually -dokku letsencrypt:enable casera-api +dokku letsencrypt:enable honeydue-api ``` ### View Resource Usage @@ -523,7 +523,7 @@ dokku letsencrypt:enable casera-api docker stats # Disk usage -dokku storage:report casera-api +dokku storage:report honeydue-api df -h ``` @@ -534,12 +534,12 @@ df -h | Command | Description | |---------|-------------| | `dokku apps:list` | List all apps | -| `dokku logs casera-api -t` | Tail logs | -| `dokku ps:restart casera-api` | Restart app | -| `dokku config:show casera-api` | Show env vars | -| `dokku postgres:connect casera-db` | Connect to DB | -| `dokku enter casera-api web` | Shell into container | -| `dokku ps:scale casera-api web=2` | Scale processes | +| `dokku logs honeydue-api -t` | Tail logs | +| `dokku ps:restart honeydue-api` | Restart app | +| `dokku config:show honeydue-api` | Show env vars | +| `dokku postgres:connect honeydue-db` | Connect to DB | +| `dokku enter honeydue-api web` | Shell into container | +| `dokku ps:scale honeydue-api web=2` | Scale processes | --- diff --git a/docs/GO_TO_PROD.md b/docs/GO_TO_PROD.md index dbb3a46..d68587f 100644 --- a/docs/GO_TO_PROD.md +++ b/docs/GO_TO_PROD.md @@ -1,6 +1,6 @@ # Go To Prod Plan -This document is a phased production-readiness plan for the Casera Go API repo. +This document is a phased production-readiness plan for the honeyDue Go API repo. Execute phases in order. Do not skip exit criteria. ## How To Use This Plan @@ -15,12 +15,12 @@ Goal: eliminate known repo/config drift before hardening. ### Tasks -1. Fix stale admin build/run targets in [`Makefile`](/Users/treyt/Desktop/code/MyCribAPI_GO/Makefile) that reference `cmd/admin` (non-existent). -2. Align worker env vars in [`docker-compose.yml`](/Users/treyt/Desktop/code/MyCribAPI_GO/docker-compose.yml) with Go config: +1. Fix stale admin build/run targets in [`Makefile`](/Users/treyt/Desktop/code/HoneyDueAPI_GO/Makefile) that reference `cmd/admin` (non-existent). +2. Align worker env vars in [`docker-compose.yml`](/Users/treyt/Desktop/code/HoneyDueAPI_GO/docker-compose.yml) with Go config: - use `TASK_REMINDER_HOUR` - use `OVERDUE_REMINDER_HOUR` - use `DAILY_DIGEST_HOUR` -3. Align supported locales in [`internal/i18n/i18n.go`](/Users/treyt/Desktop/code/MyCribAPI_GO/internal/i18n/i18n.go) with translation files in [`internal/i18n/translations`](/Users/treyt/Desktop/code/MyCribAPI_GO/internal/i18n/translations). +3. Align supported locales in [`internal/i18n/i18n.go`](/Users/treyt/Desktop/code/HoneyDueAPI_GO/internal/i18n/i18n.go) with translation files in [`internal/i18n/translations`](/Users/treyt/Desktop/code/HoneyDueAPI_GO/internal/i18n/translations). 4. Remove any committed secrets/keys from repo and history; rotate immediately. ### Validation @@ -42,7 +42,7 @@ Goal: block regressions by policy. ### Tasks -1. Update [`/.github/workflows/backend-ci.yml`](/Users/treyt/Desktop/code/MyCribAPI_GO/.github/workflows/backend-ci.yml) with required jobs: +1. Update [`/.github/workflows/backend-ci.yml`](/Users/treyt/Desktop/code/HoneyDueAPI_GO/.github/workflows/backend-ci.yml) with required jobs: - `lint` (`go vet ./...`, `gofmt -l .`) - `test` (`go test -race -count=1 ./...`) - `contract` (`go test -v -run "TestRouteSpecContract|TestKMPSpecContract" ./internal/integration/`) @@ -72,7 +72,7 @@ Goal: guarantee deploy safety for API behavior and schema changes. ### Tasks -1. Keep OpenAPI as source of truth in [`docs/openapi.yaml`](/Users/treyt/Desktop/code/MyCribAPI_GO/docs/openapi.yaml). +1. Keep OpenAPI as source of truth in [`docs/openapi.yaml`](/Users/treyt/Desktop/code/HoneyDueAPI_GO/docs/openapi.yaml). 2. Require route/schema updates in same PR as handler changes. 3. Add migration checks in CI: - migrate up on clean DB @@ -166,7 +166,7 @@ Goal: make production behavior measurable and actionable. - queue depth/retry spikes - DB latency 4. Add dead-letter queue review and replay procedure. -5. Document incident runbooks in [`docs/`](/Users/treyt/Desktop/code/MyCribAPI_GO/docs): +5. Document incident runbooks in [`docs/`](/Users/treyt/Desktop/code/HoneyDueAPI_GO/docs): - DB outage - Redis outage - push provider outage diff --git a/docs/LOCALIZATION_PLAN.md b/docs/LOCALIZATION_PLAN.md index 3e3c369..bd1c8db 100644 --- a/docs/LOCALIZATION_PLAN.md +++ b/docs/LOCALIZATION_PLAN.md @@ -1,8 +1,8 @@ -# Full Localization Plan for Casera +# Full Localization Plan for honeyDue ## Overview -Complete localization of the Casera property management app across three codebases: +Complete localization of the honeyDue property management app across three codebases: - **Go API** - Server-side localization of errors, emails, push notifications, lookup data - **KMM/Android** - Compose Multiplatform string resources - **iOS** - Apple String Catalogs (.xcstrings) @@ -28,7 +28,7 @@ go get github.com/nicksnyder/go-i18n/v2 ### 1.2 Directory Structure ``` -myCribAPI-go/ +honeyDueAPI-go/ ├── internal/ │ └── i18n/ │ ├── i18n.go # Core setup, bundle, T() helper @@ -139,7 +139,7 @@ Use Compose Multiplatform Resources (already in build.gradle.kts via `compose.co ### 2.2 Directory Structure ``` -MyCribKMM/composeApp/src/commonMain/ +HoneyDueKMM/composeApp/src/commonMain/ └── composeResources/ ├── values/ │ └── strings.xml # English (base) @@ -195,8 +195,8 @@ MyCribKMM/composeApp/src/commonMain/ ### 2.4 Usage in Compose ```kotlin -import casera.composeapp.generated.resources.Res -import casera.composeapp.generated.resources.* +import honeydue.composeapp.generated.resources.Res +import honeydue.composeapp.generated.resources.* import org.jetbrains.compose.resources.stringResource @Composable diff --git a/docs/PUSH_NOTIFICATIONS.md b/docs/PUSH_NOTIFICATIONS.md index 5d6c83b..5bb1406 100644 --- a/docs/PUSH_NOTIFICATIONS.md +++ b/docs/PUSH_NOTIFICATIONS.md @@ -1,10 +1,10 @@ # Push Notifications Architecture -This document describes how push notifications work in the Casera API. +This document describes how push notifications work in the honeyDue API. ## Overview -The Casera API sends push notifications directly to Apple Push Notification service (APNs) and Firebase Cloud Messaging (FCM) without any intermediate push server. This approach: +The honeyDue API sends push notifications directly to Apple Push Notification service (APNs) and Firebase Cloud Messaging (FCM) without any intermediate push server. This approach: - Reduces infrastructure complexity (no Gorush or other push server needed) - Provides direct control over notification payloads @@ -14,7 +14,7 @@ The Casera API sends push notifications directly to Apple Push Notification serv ``` ┌─────────────────────────────────────────────────────────────────────────┐ -│ Casera API │ +│ honeyDue API │ ├─────────────────────────────────────────────────────────────────────────┤ │ │ │ ┌──────────────┐ ┌─────────────────────┐ ┌───────────────────┐ │ @@ -153,7 +153,7 @@ let taskCategory = UNNotificationCategory( | `APNS_AUTH_KEY_PATH` | For iOS | Path to .p8 key file | | `APNS_AUTH_KEY_ID` | For iOS | Key ID from Apple Developer | | `APNS_TEAM_ID` | For iOS | Team ID from Apple Developer | -| `APNS_TOPIC` | For iOS | Bundle ID (e.g., `com.tt.casera.CaseraDev`) | +| `APNS_TOPIC` | For iOS | Bundle ID (e.g., `com.tt.honeyDue.honeyDueDev`) | | `APNS_PRODUCTION` | No | `true` for production, `false` for sandbox | | `APNS_USE_SANDBOX` | No | Deprecated, use `APNS_PRODUCTION` | | `FCM_SERVER_KEY` | For Android | Firebase Cloud Messaging server key | @@ -168,7 +168,7 @@ volumes: - ./push_certs:/certs:ro # Dokku -dokku storage:mount casera-api /path/to/push_certs:/certs +dokku storage:mount honeydue-api /path/to/push_certs:/certs ``` ## Data Flow @@ -263,7 +263,7 @@ log.Info(). docker-compose logs -f worker # Dokku -dokku logs casera-api -p worker +dokku logs honeydue-api -p worker ``` ### Test Push Manually diff --git a/docs/SECURE_MEDIA_ACCESS.md b/docs/SECURE_MEDIA_ACCESS.md index 3ab24ab..9385da6 100644 --- a/docs/SECURE_MEDIA_ACCESS.md +++ b/docs/SECURE_MEDIA_ACCESS.md @@ -192,7 +192,7 @@ suspend fun fetchMedia(mediaUrl: String): ByteArray { ## Files to Modify -### Go API (myCribAPI-go) +### Go API (honeyDueAPI-go) | File | Change | |------|--------| @@ -203,7 +203,7 @@ suspend fun fetchMedia(mediaUrl: String): ByteArray { | `/internal/services/document_service.go` | Update to generate proxy URLs | | `/internal/services/task_service.go` | Update to generate proxy URLs for completions | -### iOS (MyCribKMM/iosApp) +### iOS (HoneyDueKMM/iosApp) | File | Change | |------|--------| diff --git a/docs/SUBSCRIPTION_WEBHOOKS.md b/docs/SUBSCRIPTION_WEBHOOKS.md index 5297962..24483c2 100644 --- a/docs/SUBSCRIPTION_WEBHOOKS.md +++ b/docs/SUBSCRIPTION_WEBHOOKS.md @@ -48,7 +48,7 @@ To enable server-side receipt validation: 1. Go to [App Store Connect > Users and Access > Keys](https://appstoreconnect.apple.com/access/api) 2. Click **Generate API Key** -3. Give it a name (e.g., "Casera IAP Server") +3. Give it a name (e.g., "honeyDue IAP Server") 4. Select **App Manager** role (minimum required for IAP) 5. Download the `.p8` file - **you can only download it once!** 6. Note the **Key ID** and **Issuer ID** @@ -80,15 +80,15 @@ Google uses Cloud Pub/Sub to deliver subscription notifications. Setup requires 2. Select your project (or create one) 3. Navigate to **Pub/Sub** > **Topics** 4. Click **Create Topic** -5. Name it (e.g., `casera-subscriptions`) -6. Note the full topic name: `projects/your-project-id/topics/casera-subscriptions` +5. Name it (e.g., `honeydue-subscriptions`) +6. Note the full topic name: `projects/your-project-id/topics/honeydue-subscriptions` ### 2. Create a Push Subscription 1. In the Pub/Sub Topics list, click on your topic 2. Click **Create Subscription** 3. Configure: - - **Subscription ID**: `casera-subscription-webhook` + - **Subscription ID**: `honeydue-subscription-webhook` - **Delivery type**: Push - **Endpoint URL**: `https://your-domain.com/api/subscription/webhook/google/` - **Acknowledgment deadline**: 60 seconds @@ -100,7 +100,7 @@ Google uses Cloud Pub/Sub to deliver subscription notifications. Setup requires 2. Select your app 3. Navigate to **Monetization** > **Monetization setup** 4. Under **Real-time developer notifications**: - - Enter your topic name: `projects/your-project-id/topics/casera-subscriptions` + - Enter your topic name: `projects/your-project-id/topics/honeydue-subscriptions` 5. Click **Save** 6. Click **Send test notification** to verify the connection @@ -108,7 +108,7 @@ Google uses Cloud Pub/Sub to deliver subscription notifications. Setup requires 1. Go to [Google Cloud Console > IAM & Admin > Service Accounts](https://console.cloud.google.com/iam-admin/serviceaccounts) 2. Click **Create Service Account** -3. Name it (e.g., `casera-iap-validator`) +3. Name it (e.g., `honeydue-iap-validator`) 4. Grant roles: - `Pub/Sub Subscriber` (for webhook handling) 5. Click **Done** diff --git a/docs/TASK_KANBAN_CATEGORIZATION.md b/docs/TASK_KANBAN_CATEGORIZATION.md index 3c2a918..71579cc 100644 --- a/docs/TASK_KANBAN_CATEGORIZATION.md +++ b/docs/TASK_KANBAN_CATEGORIZATION.md @@ -1,6 +1,6 @@ # Task Kanban Categorization -This document explains how tasks are categorized into kanban columns in the Casera application. +This document explains how tasks are categorized into kanban columns in the honeyDue application. > Note: The categorization chain still computes `cancelled_tasks`, but the kanban board response > intentionally hides cancelled/archived tasks and returns only 5 visible columns. @@ -245,7 +245,7 @@ Each column has associated metadata for UI rendering: ### Basic Categorization ```go -import "github.com/treytartt/casera-api/internal/task/categorization" +import "github.com/treytartt/honeydue-api/internal/task/categorization" task := &models.Task{ DueDate: time.Now().AddDate(0, 0, 15), // 15 days from now diff --git a/docs/TASK_KANBAN_LOGIC.md b/docs/TASK_KANBAN_LOGIC.md index ac670d3..3f30f8d 100644 --- a/docs/TASK_KANBAN_LOGIC.md +++ b/docs/TASK_KANBAN_LOGIC.md @@ -1,6 +1,6 @@ # Task Kanban Board Categorization Logic -This document describes how tasks are categorized into kanban columns for display in the Casera mobile app. +This document describes how tasks are categorized into kanban columns for display in the honeyDue mobile app. > Important: The board intentionally returns **5 visible columns**. Cancelled and archived tasks are > hidden from board responses (though task-level `kanban_column` may still be `cancelled_tasks`). diff --git a/docs/TASK_LOGIC_ARCHITECTURE.md b/docs/TASK_LOGIC_ARCHITECTURE.md index 2ce360f..c4e417d 100644 --- a/docs/TASK_LOGIC_ARCHITECTURE.md +++ b/docs/TASK_LOGIC_ARCHITECTURE.md @@ -22,7 +22,7 @@ internal/task/ Pure Go functions that define task logic. These are the **canonical definitions** for all task states. ```go -import "github.com/treytartt/casera-api/internal/task/predicates" +import "github.com/treytartt/honeydue-api/internal/task/predicates" // State checks predicates.IsCompleted(task) // NextDueDate == nil && len(Completions) > 0 @@ -43,7 +43,7 @@ predicates.IsUpcoming(task, now, days) // Everything else GORM scope functions that produce the same results as predicates, but execute at the database level. Use these when counting or filtering large datasets without loading all records into memory. ```go -import "github.com/treytartt/casera-api/internal/task/scopes" +import "github.com/treytartt/honeydue-api/internal/task/scopes" // State scopes db.Scopes(scopes.ScopeActive) // is_cancelled = false AND is_archived = false @@ -69,7 +69,7 @@ db.Scopes(scopes.ScopeKanbanOrder) // Due date ASC, priority DESC, cr Determines which kanban column a task belongs to. Uses predicates internally. ```go -import "github.com/treytartt/casera-api/internal/task/categorization" +import "github.com/treytartt/honeydue-api/internal/task/categorization" // Single task column := categorization.CategorizeTask(task, 30) @@ -85,7 +85,7 @@ columns := categorization.CategorizeTasksIntoColumns(tasks, 30) For most use cases, import the main task package which re-exports everything: ```go -import "github.com/treytartt/casera-api/internal/task" +import "github.com/treytartt/honeydue-api/internal/task" // Use predicates if task.IsCompleted(t) { ... } @@ -344,7 +344,7 @@ predicates.IsInProgress(task) // Checks task.InProgress boolean For most files, use the convenience re-exports: ```go -import "github.com/treytartt/casera-api/internal/task" +import "github.com/treytartt/honeydue-api/internal/task" // Then use: task.IsCompleted(t) @@ -355,8 +355,8 @@ task.CategorizeTask(t, 30) For files that only need predicates or only need scopes: ```go -import "github.com/treytartt/casera-api/internal/task/predicates" -import "github.com/treytartt/casera-api/internal/task/scopes" +import "github.com/treytartt/honeydue-api/internal/task/predicates" +import "github.com/treytartt/honeydue-api/internal/task/scopes" ``` ## Related Documentation diff --git a/docs/marketing/COMPETITOR_ANALYSIS.md b/docs/marketing/COMPETITOR_ANALYSIS.md index 84b3743..5d67715 100644 --- a/docs/marketing/COMPETITOR_ANALYSIS.md +++ b/docs/marketing/COMPETITOR_ANALYSIS.md @@ -2,7 +2,7 @@ *Last Updated: December 2024* -This document provides a comprehensive comparison of home management apps similar to Casera/MyCrib. +This document provides a comprehensive comparison of home management apps similar to honeyDue/HoneyDue. --- @@ -10,7 +10,7 @@ This document provides a comprehensive comparison of home management apps simila | App | Task Scheduling | Multi-Property | Document Storage | Contractors | Warranty Tracking | Pricing | |-----|----------------|----------------|------------------|-------------|-------------------|---------| -| **Casera (MyCrib)** | Recurring + Kanban | Yes | Yes | Yes | Yes | TBD | +| **honeyDue** | Recurring + Kanban | Yes | Yes | Yes | Yes | TBD | | **HomeZada** | Yes | Yes (Deluxe) | Yes | No | Yes | Free / $59-99/yr | | **Centriq** | Reminders only | Yes | Yes (Manuals) | No | Yes + Recalls | Free / $18-100/yr | | **Homer** | Yes | Yes | Yes | Contacts only | Yes | Free / Premium | @@ -187,9 +187,9 @@ This document provides a comprehensive comparison of home management apps simila ## Competitive Positioning -### Where Casera Differentiates +### Where honeyDue Differentiates -Based on competitor analysis, Casera has unique advantages: +Based on competitor analysis, honeyDue has unique advantages: 1. **Contractor Management** - Most competitors lack this entirely 2. **Kanban Task View** - Unique visual organization (overdue, due soon, upcoming, completed) @@ -197,9 +197,9 @@ Based on competitor analysis, Casera has unique advantages: 4. **Combined Approach** - Tasks + Documents + Contractors + Warranties in one app 5. **Recurring Task Intelligence** - Smart next-due-date calculation for recurring maintenance -### Competitor Gaps Casera Fills +### Competitor Gaps honeyDue Fills -| Gap | Competitors Missing It | Casera Solution | +| Gap | Competitors Missing It | honeyDue Solution | |-----|------------------------|-----------------| | Contractor database | All except Homer (contacts only) | Full contractor profiles with specialties | | Kanban visualization | All | Visual task board with columns | @@ -229,12 +229,12 @@ Based on market analysis: ### Competitive Price Points -| Competitor | Annual Price | Casera Comparison | +| Competitor | Annual Price | honeyDue Comparison | |------------|--------------|-------------------| -| Tody | $6 | Casera offers much more (not just cleaning) | -| Sweepy | $15-17 | Casera offers full home management | -| Centriq | $18-100 | Casera has better task management | -| HomeZada | $59-149 | Casera adds contractors, better UX | +| Tody | $6 | honeyDue offers much more (not just cleaning) | +| Sweepy | $15-17 | honeyDue offers full home management | +| Centriq | $18-100 | honeyDue has better task management | +| HomeZada | $59-149 | honeyDue adds contractors, better UX | --- diff --git a/docs/marketing/PRESS_RELEASE.md b/docs/marketing/PRESS_RELEASE.md index 4810e8c..8c47e44 100644 --- a/docs/marketing/PRESS_RELEASE.md +++ b/docs/marketing/PRESS_RELEASE.md @@ -11,28 +11,28 @@ --- -# Casera Launches to Help Homeowners Take Control of Home Maintenance +# honeyDue Launches to Help Homeowners Take Control of Home Maintenance *New mobile app brings task management, document storage, and contractor organization to homeowners tired of forgotten maintenance and lost warranties* --- -**[CITY, STATE] — [DATE]** — Casera, a new home maintenance management app, launched today on iOS and Android, offering homeowners a simple yet powerful way to organize every aspect of home upkeep. The app combines recurring task scheduling, document storage, contractor management, and household collaboration in one intuitive platform. +**[CITY, STATE] — [DATE]** — honeyDue, a new home maintenance management app, launched today on iOS and Android, offering homeowners a simple yet powerful way to organize every aspect of home upkeep. The app combines recurring task scheduling, document storage, contractor management, and household collaboration in one intuitive platform. -"Homeownership comes with a hidden job: maintenance manager," said [Founder Name], founder of Casera. "Most people cobble together sticky notes, spreadsheet reminders, and hope. We built Casera because there had to be a better way." +"Homeownership comes with a hidden job: maintenance manager," said [Founder Name], founder of honeyDue. "Most people cobble together sticky notes, spreadsheet reminders, and hope. We built honeyDue because there had to be a better way." -### The Problem Casera Solves +### The Problem honeyDue Solves The average single-family home requires maintenance on over 40 different systems and components, from HVAC filters to roof inspections. According to HomeAdvisor, homeowners spend an average of $3,192 annually on emergency repairs — many of which could be prevented with regular maintenance. Yet most homeowners lack any organized system to track these tasks. Warranties get lost in email. Contractor contact information lives in scattered text threads. Important maintenance gets forgotten until something breaks. -### How Casera Works +### How honeyDue Works -Casera provides homeowners with four core capabilities: +honeyDue provides homeowners with four core capabilities: **Smart Task Scheduling** -Users can create one-time or recurring maintenance tasks with customizable frequencies — from daily to annually. The app's kanban-style board shows tasks organized by urgency: overdue, due soon, upcoming, and completed. When a recurring task is completed, Casera automatically schedules the next occurrence. +Users can create one-time or recurring maintenance tasks with customizable frequencies — from daily to annually. The app's kanban-style board shows tasks organized by urgency: overdue, due soon, upcoming, and completed. When a recurring task is completed, honeyDue automatically schedules the next occurrence. **Document Storage** Warranties, manuals, receipts, and home documents can be uploaded and organized by room or category. When an appliance needs service, the warranty information is instantly accessible. @@ -51,13 +51,13 @@ The home services market is projected to reach $1.2 trillion by 2026, driven by ### Pricing and Availability -Casera is available now as a free download on the [App Store](link) and [Google Play](link). The free tier includes core functionality for one property. Premium tiers offering multiple properties, unlimited document storage, and priority support are available starting at $[X]/month. +honeyDue is available now as a free download on the [App Store](link) and [Google Play](link). The free tier includes core functionality for one property. Premium tiers offering multiple properties, unlimited document storage, and priority support are available starting at $[X]/month. -### About Casera +### About honeyDue -Casera is a home maintenance management platform designed to help homeowners stay ahead of maintenance, protect their investment, and reduce the stress of property upkeep. Founded in [YEAR], Casera is headquartered in [CITY, STATE]. +honeyDue is a home maintenance management platform designed to help homeowners stay ahead of maintenance, protect their investment, and reduce the stress of property upkeep. Founded in [YEAR], honeyDue is headquartered in [CITY, STATE]. -For more information, visit [www.casera.app](https://www.casera.app) or follow @CaseraApp on [Twitter](link) and [Instagram](link). +For more information, visit [www.honeyDue.treytartt.com](https://www.honeyDue.treytartt.com) or follow @honeyDueApp on [Twitter](link) and [Instagram](link). --- @@ -76,7 +76,7 @@ High-resolution logos, app screenshots, and founder headshots are available at: | **Price** | Free with premium tiers | | **Headquarters** | [CITY, STATE] | | **Website** | [URL] | -| **Social** | @CaseraApp | +| **Social** | @honeyDueApp | --- @@ -94,7 +94,7 @@ High-resolution logos, app screenshots, and founder headshots are available at: Hi [Name], -Quick pitch: Casera is a new app that helps homeowners track recurring maintenance, store warranties, and organize contractor info — all in one place. +Quick pitch: honeyDue is a new app that helps homeowners track recurring maintenance, store warranties, and organize contractor info — all in one place. **The hook:** The average homeowner spends $3,000+/year on emergency repairs. Most are preventable with basic maintenance. But there's been no good system to track it all — until now. @@ -115,7 +115,7 @@ Best, ## Tweet-Length Announcement ``` -📱 Casera just launched — the home maintenance app for homeowners who are tired of forgetting filter changes and losing warranties. +📱 honeyDue just launched — the home maintenance app for homeowners who are tired of forgetting filter changes and losing warranties. Free on iOS + Android. @@ -129,10 +129,10 @@ Your home runs better when you do. 🏠 *Choose the one that fits your story best:* **Problem-focused:** -> "I built Casera after my AC died because I forgot a $150 tune-up. That $4,000 lesson convinced me there had to be a better way to manage home maintenance." +> "I built honeyDue after my AC died because I forgot a $150 tune-up. That $4,000 lesson convinced me there had to be a better way to manage home maintenance." **Vision-focused:** -> "We believe your home deserves the same organizational tools as your work calendar. Casera brings that professionalism to home management." +> "We believe your home deserves the same organizational tools as your work calendar. honeyDue brings that professionalism to home management." **Market-focused:** > "Smart home technology has focused on automation and convenience. We're focused on something simpler: helping people remember to take care of their biggest investment." @@ -168,21 +168,21 @@ Journalists can approach this story from multiple angles: 1. What's the most commonly forgotten home maintenance task? 2. How much can preventive maintenance actually save homeowners? 3. Why hasn't this problem been solved before? -4. How is Casera different from calendar reminders? +4. How is honeyDue different from calendar reminders? 5. What's the most surprising thing you've learned from users? --- ## Boilerplate -**About Casera (50 words)** -Casera is a home maintenance management app that helps homeowners track recurring tasks, store important documents, organize contractor information, and collaborate with household members. Available on iOS and Android, Casera brings clarity and organization to the often-overwhelming job of home upkeep. +**About honeyDue (50 words)** +honeyDue is a home maintenance management app that helps homeowners track recurring tasks, store important documents, organize contractor information, and collaborate with household members. Available on iOS and Android, honeyDue brings clarity and organization to the often-overwhelming job of home upkeep. -**About Casera (25 words)** -Casera is a home maintenance app that helps homeowners track tasks, store warranties, and organize contractor info — all in one place. +**About honeyDue (25 words)** +honeyDue is a home maintenance app that helps homeowners track tasks, store warranties, and organize contractor info — all in one place. -**About Casera (10 words)** -Casera: The organized way to manage home maintenance. +**About honeyDue (10 words)** +honeyDue: The organized way to manage home maintenance. --- @@ -195,6 +195,6 @@ Casera: The organized way to manage home maintenance. **General Information:** Website: [URL] -Email: hello@casera.app -Twitter: @CaseraApp -Instagram: @CaseraApp +Email: hello@honeyDue.treytartt.com +Twitter: @honeyDueApp +Instagram: @honeyDueApp diff --git a/docs/marketing/SOCIAL_MEDIA_KIT.md b/docs/marketing/SOCIAL_MEDIA_KIT.md index 5969f7a..2426721 100644 --- a/docs/marketing/SOCIAL_MEDIA_KIT.md +++ b/docs/marketing/SOCIAL_MEDIA_KIT.md @@ -1,6 +1,6 @@ -# Casera Social Media Kit +# honeyDue Social Media Kit -*Ready-to-use posts for launching and promoting Casera* +*Ready-to-use posts for launching and promoting honeyDue* --- @@ -23,7 +23,7 @@ **Post 1 - Main Launch** ``` -Introducing Casera 🏠 +Introducing honeyDue 🏠 The home maintenance app that actually makes sense. @@ -41,7 +41,7 @@ Download free → [link] ``` That "I should really check the HVAC filter" thought you have every 3 months? -Casera remembers it for you. +honeyDue remembers it for you. Set it once. Get reminded forever. @@ -56,7 +56,7 @@ POV: You need a plumber at 9pm ❌ Googling "plumber near me" again ❌ Hoping you saved that business card -✅ Opening Casera and finding Mike the Plumber instantly +✅ Opening honeyDue and finding Mike the Plumber instantly Your contractor rolodex, always in your pocket. ``` @@ -73,7 +73,7 @@ Your contractor rolodex, always in your pocket. These aren't one-time tasks. They come back. -Casera knows that. Set the frequency once, and we'll remind you every time it's due. +honeyDue knows that. Set the frequency once, and we'll remind you every time it's due. Smart home maintenance → [link] ``` @@ -87,7 +87,7 @@ Finally, a way to actually SEE your home maintenance: 🟢 Upcoming — you're ahead of the game ✅ Completed — feel that satisfaction -Casera's kanban view. Simple. Visual. Effective. +honeyDue's kanban view. Simple. Visual. Effective. ``` **Document Storage** @@ -97,7 +97,7 @@ Where's the warranty for your fridge? A) Filing cabinet somewhere B) Email from 3 years ago C) No idea -D) Casera — because you uploaded it when you bought it +D) honeyDue — because you uploaded it when you bought it Be option D. ``` @@ -109,7 +109,7 @@ Be option D. Sound familiar? -Casera lets you share your home with family members. Everyone sees what needs doing. No more crossed wires. +honeyDue lets you share your home with family members. Everyone sees what needs doing. No more crossed wires. (pun intended) ``` @@ -152,7 +152,7 @@ Reply with: 5/ Smoke detector batteries — Every 6 months. Life-saving. -Save this. Or better yet, add them all to Casera and never think about it again. +Save this. Or better yet, add them all to honeyDue and never think about it again. ``` --- @@ -163,7 +163,7 @@ Save this. Or better yet, add them all to Casera and never think about it again. **Slide 1:** ``` -MEET CASERA +MEET HONEYDUE The home maintenance app you didn't know you needed (but definitely do) → @@ -187,7 +187,7 @@ Sound familiar? ``` THE SOLUTION -Casera organizes everything: +honeyDue organizes everything: 📋 Tasks — recurring reminders that actually recur 📄 Documents — warranties, manuals, receipts @@ -219,7 +219,7 @@ GET STARTED FREE Your home works hard for you. Let's return the favor. -Download Casera +Download honeyDue Link in bio 🏠 ``` @@ -232,7 +232,7 @@ Link in bio 🏠 Caption: Sunday morning coffee hits different when you're not mentally running through everything you forgot to maintain. -Casera handles the remembering. +honeyDue handles the remembering. You handle the relaxing. #homeowner #homeownership #adulting #homemaintenance #organizedhome #homeownertips #firsttimehomebuyer @@ -247,7 +247,7 @@ Most could be prevented with regular maintenance. The unsexy truth: Boring scheduled tasks save exciting amounts of money. -Casera makes the boring part automatic. +honeyDue makes the boring part automatic. #homeownerhacks #homemaintenance #savemoney #preventivemaintenance #homecare ``` @@ -261,7 +261,7 @@ Then the AC died in July because I forgot the spring tune-up. $4,200 lesson learned. -Now I use Casera." +Now I use honeyDue." — Every homeowner, eventually @@ -281,7 +281,7 @@ Hook: "Nobody told me homes need THIS much maintenance" Content: - Quick cuts of common maintenance tasks - Text overlays with frequency -- End with Casera app demo +- End with honeyDue app demo Audio: Trending sound ``` @@ -303,7 +303,7 @@ Audio: Satisfying/success sound ``` Weekly recurring content: - One maintenance tip per week -- Swipe up to add task to Casera +- Swipe up to add task to honeyDue - Build habit + community ``` @@ -314,7 +314,7 @@ Weekly recurring content: ### Launch Announcement ``` -I'm excited to share something I've been working on: Casera. +I'm excited to share something I've been working on: honeyDue. It started with a simple frustration. As a homeowner, I was juggling: • Sticky notes for maintenance reminders @@ -324,7 +324,7 @@ It started with a simple frustration. As a homeowner, I was juggling: There had to be a better way. -Casera is that better way. +honeyDue is that better way. It's a home maintenance app that brings everything together: → Recurring task reminders (that actually recur) @@ -361,7 +361,7 @@ It's not about automation. It's about organization. The homes that last aren't the most automated. They're the most maintained. -That's why we built Casera — not another smart device, but a smart system for the maintenance that actually matters. +That's why we built honeyDue — not another smart device, but a smart system for the maintenance that actually matters. Sometimes the most valuable technology is the simplest. @@ -371,7 +371,7 @@ Sometimes the most valuable technology is the simplest. ### Feature Announcement Template ``` -New in Casera: [FEATURE NAME] +New in honeyDue: [FEATURE NAME] The problem: [One sentence describing pain point] @@ -388,7 +388,7 @@ Update your app to try it today. What feature should we build next? -#productupdate #casera #hometech +#productupdate #honeydue #hometech ``` --- @@ -397,7 +397,7 @@ What feature should we build next? ### Primary Hashtags (use on every post) ``` -#Casera #HomeMaintenance #HomeOwner #HomeManagement +#honeyDue #HomeMaintenance #HomeOwner #HomeManagement ``` ### Secondary Hashtags (rotate based on content) @@ -435,12 +435,12 @@ Winter: #WinterHome #HeatingSystem ### Positive Feedback ``` -Thanks so much! 🏠 We're glad Casera is helping you stay on top of things. Let us know if there's anything we can do better! +Thanks so much! 🏠 We're glad honeyDue is helping you stay on top of things. Let us know if there's anything we can do better! ``` ### Feature Request ``` -Love this idea! We're adding it to our list. Thanks for helping us make Casera better! 🙏 +Love this idea! We're adding it to our list. Thanks for helping us make honeyDue better! 🙏 ``` ### Support Issue @@ -450,5 +450,5 @@ Sorry you're running into trouble! DM us the details and we'll get it sorted out ### Competitor Mention ``` -Great question! We focus on [specific differentiator]. Happy to share more about how Casera might fit your needs — DM us anytime! +Great question! We focus on [specific differentiator]. Happy to share more about how honeyDue might fit your needs — DM us anytime! ``` diff --git a/docs/openapi.yaml b/docs/openapi.yaml index 3ae4cbd..f1c610a 100644 --- a/docs/openapi.yaml +++ b/docs/openapi.yaml @@ -1,8 +1,8 @@ openapi: 3.0.3 info: - title: Casera (MyCrib) API + title: honeyDue API description: | - REST API for the Casera property management platform. + REST API for the honeyDue property management platform. Consumed by iOS (SwiftUI) and Android (Compose) mobile clients via Kotlin Multiplatform. ## Authentication @@ -24,10 +24,10 @@ info: All errors follow a consistent JSON shape. Validation errors include a `details` map. version: 2.0.0 contact: - name: Casera Team + name: honeyDue Team servers: - - url: https://mycrib.treytartt.com/api + - url: https://honeyDue.treytartt.com/api description: Production - url: http://127.0.0.1:8000/api description: Local development (iOS simulator) @@ -813,7 +813,7 @@ paths: post: tags: [Residences] operationId: generateSharePackage - summary: Generate a share package (.casera file metadata) + summary: Generate a share package (.honeydue file metadata) security: - tokenAuth: [] parameters: diff --git a/go.mod b/go.mod index ebe8498..208a84a 100644 --- a/go.mod +++ b/go.mod @@ -1,4 +1,4 @@ -module github.com/treytartt/casera-api +module github.com/treytartt/honeydue-api go 1.24.0 diff --git a/internal/admin/dto/requests.go b/internal/admin/dto/requests.go index 139919a..fde6477 100644 --- a/internal/admin/dto/requests.go +++ b/internal/admin/dto/requests.go @@ -1,6 +1,6 @@ package dto -import "github.com/treytartt/casera-api/internal/middleware" +import "github.com/treytartt/honeydue-api/internal/middleware" // PaginationParams holds pagination query parameters type PaginationParams struct { diff --git a/internal/admin/handlers/admin_security_test.go b/internal/admin/handlers/admin_security_test.go index ed33768..9a7bc6f 100644 --- a/internal/admin/handlers/admin_security_test.go +++ b/internal/admin/handlers/admin_security_test.go @@ -6,7 +6,7 @@ import ( "github.com/stretchr/testify/assert" - "github.com/treytartt/casera-api/internal/admin/dto" + "github.com/treytartt/honeydue-api/internal/admin/dto" ) func TestAdminSortBy_ValidColumn_Works(t *testing.T) { diff --git a/internal/admin/handlers/admin_user_handler.go b/internal/admin/handlers/admin_user_handler.go index 450c58c..ac4ae0e 100644 --- a/internal/admin/handlers/admin_user_handler.go +++ b/internal/admin/handlers/admin_user_handler.go @@ -7,9 +7,9 @@ import ( "github.com/labstack/echo/v4" "gorm.io/gorm" - "github.com/treytartt/casera-api/internal/admin/dto" - "github.com/treytartt/casera-api/internal/middleware" - "github.com/treytartt/casera-api/internal/models" + "github.com/treytartt/honeydue-api/internal/admin/dto" + "github.com/treytartt/honeydue-api/internal/middleware" + "github.com/treytartt/honeydue-api/internal/models" ) // AdminUserManagementHandler handles admin user management endpoints diff --git a/internal/admin/handlers/apple_social_auth_handler.go b/internal/admin/handlers/apple_social_auth_handler.go index 0e7edc1..462f8c8 100644 --- a/internal/admin/handlers/apple_social_auth_handler.go +++ b/internal/admin/handlers/apple_social_auth_handler.go @@ -7,8 +7,8 @@ import ( "github.com/labstack/echo/v4" "gorm.io/gorm" - "github.com/treytartt/casera-api/internal/admin/dto" - "github.com/treytartt/casera-api/internal/models" + "github.com/treytartt/honeydue-api/internal/admin/dto" + "github.com/treytartt/honeydue-api/internal/models" ) // AdminAppleSocialAuthHandler handles admin Apple social auth management endpoints diff --git a/internal/admin/handlers/auth_handler.go b/internal/admin/handlers/auth_handler.go index a7f0710..5e18962 100644 --- a/internal/admin/handlers/auth_handler.go +++ b/internal/admin/handlers/auth_handler.go @@ -5,10 +5,10 @@ import ( "github.com/labstack/echo/v4" - "github.com/treytartt/casera-api/internal/config" - "github.com/treytartt/casera-api/internal/middleware" - "github.com/treytartt/casera-api/internal/models" - "github.com/treytartt/casera-api/internal/repositories" + "github.com/treytartt/honeydue-api/internal/config" + "github.com/treytartt/honeydue-api/internal/middleware" + "github.com/treytartt/honeydue-api/internal/models" + "github.com/treytartt/honeydue-api/internal/repositories" ) // AdminAuthHandler handles admin authentication endpoints diff --git a/internal/admin/handlers/auth_token_handler.go b/internal/admin/handlers/auth_token_handler.go index 4fc305a..0c938fe 100644 --- a/internal/admin/handlers/auth_token_handler.go +++ b/internal/admin/handlers/auth_token_handler.go @@ -7,8 +7,8 @@ import ( "github.com/labstack/echo/v4" "gorm.io/gorm" - "github.com/treytartt/casera-api/internal/admin/dto" - "github.com/treytartt/casera-api/internal/models" + "github.com/treytartt/honeydue-api/internal/admin/dto" + "github.com/treytartt/honeydue-api/internal/models" ) // AdminAuthTokenHandler handles admin auth token management endpoints diff --git a/internal/admin/handlers/completion_handler.go b/internal/admin/handlers/completion_handler.go index 3e5008b..768a45f 100644 --- a/internal/admin/handlers/completion_handler.go +++ b/internal/admin/handlers/completion_handler.go @@ -8,8 +8,8 @@ import ( "github.com/shopspring/decimal" "gorm.io/gorm" - "github.com/treytartt/casera-api/internal/admin/dto" - "github.com/treytartt/casera-api/internal/models" + "github.com/treytartt/honeydue-api/internal/admin/dto" + "github.com/treytartt/honeydue-api/internal/models" ) // AdminCompletionHandler handles admin task completion management endpoints diff --git a/internal/admin/handlers/completion_image_handler.go b/internal/admin/handlers/completion_image_handler.go index 7f24d8c..5a05f9c 100644 --- a/internal/admin/handlers/completion_image_handler.go +++ b/internal/admin/handlers/completion_image_handler.go @@ -7,8 +7,8 @@ import ( "github.com/labstack/echo/v4" "gorm.io/gorm" - "github.com/treytartt/casera-api/internal/admin/dto" - "github.com/treytartt/casera-api/internal/models" + "github.com/treytartt/honeydue-api/internal/admin/dto" + "github.com/treytartt/honeydue-api/internal/models" ) // AdminCompletionImageHandler handles admin task completion image management endpoints diff --git a/internal/admin/handlers/confirmation_code_handler.go b/internal/admin/handlers/confirmation_code_handler.go index e4fa1d8..e09e0ea 100644 --- a/internal/admin/handlers/confirmation_code_handler.go +++ b/internal/admin/handlers/confirmation_code_handler.go @@ -7,8 +7,8 @@ import ( "github.com/labstack/echo/v4" "gorm.io/gorm" - "github.com/treytartt/casera-api/internal/admin/dto" - "github.com/treytartt/casera-api/internal/models" + "github.com/treytartt/honeydue-api/internal/admin/dto" + "github.com/treytartt/honeydue-api/internal/models" ) // AdminConfirmationCodeHandler handles admin confirmation code management endpoints diff --git a/internal/admin/handlers/contractor_handler.go b/internal/admin/handlers/contractor_handler.go index 26175c1..5c7f6fe 100644 --- a/internal/admin/handlers/contractor_handler.go +++ b/internal/admin/handlers/contractor_handler.go @@ -7,8 +7,8 @@ import ( "github.com/labstack/echo/v4" "gorm.io/gorm" - "github.com/treytartt/casera-api/internal/admin/dto" - "github.com/treytartt/casera-api/internal/models" + "github.com/treytartt/honeydue-api/internal/admin/dto" + "github.com/treytartt/honeydue-api/internal/models" ) // AdminContractorHandler handles admin contractor management endpoints diff --git a/internal/admin/handlers/dashboard_handler.go b/internal/admin/handlers/dashboard_handler.go index 288952e..8cc16f8 100644 --- a/internal/admin/handlers/dashboard_handler.go +++ b/internal/admin/handlers/dashboard_handler.go @@ -7,8 +7,8 @@ import ( "github.com/labstack/echo/v4" "gorm.io/gorm" - "github.com/treytartt/casera-api/internal/models" - "github.com/treytartt/casera-api/internal/task/scopes" + "github.com/treytartt/honeydue-api/internal/models" + "github.com/treytartt/honeydue-api/internal/task/scopes" ) // AdminDashboardHandler handles admin dashboard endpoints diff --git a/internal/admin/handlers/device_handler.go b/internal/admin/handlers/device_handler.go index 29a48be..160574a 100644 --- a/internal/admin/handlers/device_handler.go +++ b/internal/admin/handlers/device_handler.go @@ -7,8 +7,8 @@ import ( "github.com/labstack/echo/v4" "gorm.io/gorm" - "github.com/treytartt/casera-api/internal/admin/dto" - "github.com/treytartt/casera-api/internal/models" + "github.com/treytartt/honeydue-api/internal/admin/dto" + "github.com/treytartt/honeydue-api/internal/models" ) // AdminDeviceHandler handles admin device management endpoints diff --git a/internal/admin/handlers/document_handler.go b/internal/admin/handlers/document_handler.go index bd794f3..3ceea50 100644 --- a/internal/admin/handlers/document_handler.go +++ b/internal/admin/handlers/document_handler.go @@ -9,8 +9,8 @@ import ( "github.com/shopspring/decimal" "gorm.io/gorm" - "github.com/treytartt/casera-api/internal/admin/dto" - "github.com/treytartt/casera-api/internal/models" + "github.com/treytartt/honeydue-api/internal/admin/dto" + "github.com/treytartt/honeydue-api/internal/models" ) // AdminDocumentHandler handles admin document management endpoints diff --git a/internal/admin/handlers/document_image_handler.go b/internal/admin/handlers/document_image_handler.go index bb10225..c8f5773 100644 --- a/internal/admin/handlers/document_image_handler.go +++ b/internal/admin/handlers/document_image_handler.go @@ -7,8 +7,8 @@ import ( "github.com/labstack/echo/v4" "gorm.io/gorm" - "github.com/treytartt/casera-api/internal/admin/dto" - "github.com/treytartt/casera-api/internal/models" + "github.com/treytartt/honeydue-api/internal/admin/dto" + "github.com/treytartt/honeydue-api/internal/models" ) // AdminDocumentImageHandler handles admin document image management endpoints diff --git a/internal/admin/handlers/feature_benefit_handler.go b/internal/admin/handlers/feature_benefit_handler.go index 9b2c5a3..da96980 100644 --- a/internal/admin/handlers/feature_benefit_handler.go +++ b/internal/admin/handlers/feature_benefit_handler.go @@ -7,8 +7,8 @@ import ( "github.com/labstack/echo/v4" "gorm.io/gorm" - "github.com/treytartt/casera-api/internal/admin/dto" - "github.com/treytartt/casera-api/internal/models" + "github.com/treytartt/honeydue-api/internal/admin/dto" + "github.com/treytartt/honeydue-api/internal/models" ) // AdminFeatureBenefitHandler handles admin feature benefit management endpoints diff --git a/internal/admin/handlers/limitations_handler.go b/internal/admin/handlers/limitations_handler.go index e985aaa..4627a52 100644 --- a/internal/admin/handlers/limitations_handler.go +++ b/internal/admin/handlers/limitations_handler.go @@ -7,7 +7,7 @@ import ( "github.com/labstack/echo/v4" "gorm.io/gorm" - "github.com/treytartt/casera-api/internal/models" + "github.com/treytartt/honeydue-api/internal/models" ) // AdminLimitationsHandler handles subscription limitations management diff --git a/internal/admin/handlers/lookup_handler.go b/internal/admin/handlers/lookup_handler.go index c19c8c6..b76101e 100644 --- a/internal/admin/handlers/lookup_handler.go +++ b/internal/admin/handlers/lookup_handler.go @@ -9,10 +9,10 @@ import ( "github.com/rs/zerolog/log" "gorm.io/gorm" - "github.com/treytartt/casera-api/internal/admin/dto" - "github.com/treytartt/casera-api/internal/models" - "github.com/treytartt/casera-api/internal/notifications" - "github.com/treytartt/casera-api/internal/services" + "github.com/treytartt/honeydue-api/internal/admin/dto" + "github.com/treytartt/honeydue-api/internal/models" + "github.com/treytartt/honeydue-api/internal/notifications" + "github.com/treytartt/honeydue-api/internal/services" ) // AdminLookupHandler handles admin lookup table management endpoints diff --git a/internal/admin/handlers/notification_handler.go b/internal/admin/handlers/notification_handler.go index 225279a..bea8886 100644 --- a/internal/admin/handlers/notification_handler.go +++ b/internal/admin/handlers/notification_handler.go @@ -10,10 +10,10 @@ import ( "github.com/labstack/echo/v4" "gorm.io/gorm" - "github.com/treytartt/casera-api/internal/admin/dto" - "github.com/treytartt/casera-api/internal/models" - "github.com/treytartt/casera-api/internal/push" - "github.com/treytartt/casera-api/internal/services" + "github.com/treytartt/honeydue-api/internal/admin/dto" + "github.com/treytartt/honeydue-api/internal/models" + "github.com/treytartt/honeydue-api/internal/push" + "github.com/treytartt/honeydue-api/internal/services" ) // AdminNotificationHandler handles admin notification management endpoints @@ -363,7 +363,7 @@ func (h *AdminNotificationHandler) SendTestEmail(c echo.Context) error {

` + escapedSubject + `

` + escapedBody + `

-

This is a test email sent from Casera Admin Panel.

+

This is a test email sent from honeyDue Admin Panel.

` diff --git a/internal/admin/handlers/notification_prefs_handler.go b/internal/admin/handlers/notification_prefs_handler.go index 3fcc866..273e4d4 100644 --- a/internal/admin/handlers/notification_prefs_handler.go +++ b/internal/admin/handlers/notification_prefs_handler.go @@ -7,8 +7,8 @@ import ( "github.com/labstack/echo/v4" "gorm.io/gorm" - "github.com/treytartt/casera-api/internal/admin/dto" - "github.com/treytartt/casera-api/internal/models" + "github.com/treytartt/honeydue-api/internal/admin/dto" + "github.com/treytartt/honeydue-api/internal/models" ) // AdminNotificationPrefsHandler handles notification preference management diff --git a/internal/admin/handlers/onboarding_handler.go b/internal/admin/handlers/onboarding_handler.go index 64127f8..61927f2 100644 --- a/internal/admin/handlers/onboarding_handler.go +++ b/internal/admin/handlers/onboarding_handler.go @@ -7,8 +7,8 @@ import ( "github.com/labstack/echo/v4" "gorm.io/gorm" - "github.com/treytartt/casera-api/internal/models" - "github.com/treytartt/casera-api/internal/services" + "github.com/treytartt/honeydue-api/internal/models" + "github.com/treytartt/honeydue-api/internal/services" ) // AdminOnboardingHandler handles admin onboarding email operations diff --git a/internal/admin/handlers/password_reset_code_handler.go b/internal/admin/handlers/password_reset_code_handler.go index 2c905d6..c99c4bc 100644 --- a/internal/admin/handlers/password_reset_code_handler.go +++ b/internal/admin/handlers/password_reset_code_handler.go @@ -7,8 +7,8 @@ import ( "github.com/labstack/echo/v4" "gorm.io/gorm" - "github.com/treytartt/casera-api/internal/admin/dto" - "github.com/treytartt/casera-api/internal/models" + "github.com/treytartt/honeydue-api/internal/admin/dto" + "github.com/treytartt/honeydue-api/internal/models" ) // AdminPasswordResetCodeHandler handles admin password reset code management endpoints diff --git a/internal/admin/handlers/promotion_handler.go b/internal/admin/handlers/promotion_handler.go index d20d70b..8a064ae 100644 --- a/internal/admin/handlers/promotion_handler.go +++ b/internal/admin/handlers/promotion_handler.go @@ -8,8 +8,8 @@ import ( "github.com/labstack/echo/v4" "gorm.io/gorm" - "github.com/treytartt/casera-api/internal/admin/dto" - "github.com/treytartt/casera-api/internal/models" + "github.com/treytartt/honeydue-api/internal/admin/dto" + "github.com/treytartt/honeydue-api/internal/models" ) // AdminPromotionHandler handles admin promotion management endpoints diff --git a/internal/admin/handlers/residence_handler.go b/internal/admin/handlers/residence_handler.go index 85b49ea..fb3dd76 100644 --- a/internal/admin/handlers/residence_handler.go +++ b/internal/admin/handlers/residence_handler.go @@ -9,8 +9,8 @@ import ( "github.com/shopspring/decimal" "gorm.io/gorm" - "github.com/treytartt/casera-api/internal/admin/dto" - "github.com/treytartt/casera-api/internal/models" + "github.com/treytartt/honeydue-api/internal/admin/dto" + "github.com/treytartt/honeydue-api/internal/models" ) // AdminResidenceHandler handles admin residence management endpoints diff --git a/internal/admin/handlers/settings_handler.go b/internal/admin/handlers/settings_handler.go index de9015f..cb5ed50 100644 --- a/internal/admin/handlers/settings_handler.go +++ b/internal/admin/handlers/settings_handler.go @@ -12,8 +12,8 @@ import ( "github.com/rs/zerolog/log" "gorm.io/gorm" - "github.com/treytartt/casera-api/internal/models" - "github.com/treytartt/casera-api/internal/services" + "github.com/treytartt/honeydue-api/internal/models" + "github.com/treytartt/honeydue-api/internal/services" ) // AdminSettingsHandler handles system settings management diff --git a/internal/admin/handlers/share_code_handler.go b/internal/admin/handlers/share_code_handler.go index e64498d..9e82baa 100644 --- a/internal/admin/handlers/share_code_handler.go +++ b/internal/admin/handlers/share_code_handler.go @@ -7,8 +7,8 @@ import ( "github.com/labstack/echo/v4" "gorm.io/gorm" - "github.com/treytartt/casera-api/internal/admin/dto" - "github.com/treytartt/casera-api/internal/models" + "github.com/treytartt/honeydue-api/internal/admin/dto" + "github.com/treytartt/honeydue-api/internal/models" ) // AdminShareCodeHandler handles admin share code management endpoints diff --git a/internal/admin/handlers/subscription_handler.go b/internal/admin/handlers/subscription_handler.go index 3c912d0..b9d640c 100644 --- a/internal/admin/handlers/subscription_handler.go +++ b/internal/admin/handlers/subscription_handler.go @@ -8,8 +8,8 @@ import ( "github.com/labstack/echo/v4" "gorm.io/gorm" - "github.com/treytartt/casera-api/internal/admin/dto" - "github.com/treytartt/casera-api/internal/models" + "github.com/treytartt/honeydue-api/internal/admin/dto" + "github.com/treytartt/honeydue-api/internal/models" ) // AdminSubscriptionHandler handles admin subscription management endpoints diff --git a/internal/admin/handlers/task_handler.go b/internal/admin/handlers/task_handler.go index a687c46..c7e6008 100644 --- a/internal/admin/handlers/task_handler.go +++ b/internal/admin/handlers/task_handler.go @@ -9,8 +9,8 @@ import ( "github.com/shopspring/decimal" "gorm.io/gorm" - "github.com/treytartt/casera-api/internal/admin/dto" - "github.com/treytartt/casera-api/internal/models" + "github.com/treytartt/honeydue-api/internal/admin/dto" + "github.com/treytartt/honeydue-api/internal/models" ) // AdminTaskHandler handles admin task management endpoints diff --git a/internal/admin/handlers/task_template_handler.go b/internal/admin/handlers/task_template_handler.go index e54bc51..3069725 100644 --- a/internal/admin/handlers/task_template_handler.go +++ b/internal/admin/handlers/task_template_handler.go @@ -10,8 +10,8 @@ import ( "github.com/rs/zerolog/log" "gorm.io/gorm" - "github.com/treytartt/casera-api/internal/models" - "github.com/treytartt/casera-api/internal/services" + "github.com/treytartt/honeydue-api/internal/models" + "github.com/treytartt/honeydue-api/internal/services" ) // AdminTaskTemplateHandler handles admin task template management endpoints diff --git a/internal/admin/handlers/user_handler.go b/internal/admin/handlers/user_handler.go index 0db1cca..f23ffc2 100644 --- a/internal/admin/handlers/user_handler.go +++ b/internal/admin/handlers/user_handler.go @@ -7,8 +7,8 @@ import ( "github.com/labstack/echo/v4" "gorm.io/gorm" - "github.com/treytartt/casera-api/internal/admin/dto" - "github.com/treytartt/casera-api/internal/models" + "github.com/treytartt/honeydue-api/internal/admin/dto" + "github.com/treytartt/honeydue-api/internal/models" ) // AdminUserHandler handles admin user management endpoints diff --git a/internal/admin/handlers/user_profile_handler.go b/internal/admin/handlers/user_profile_handler.go index 28e9731..63c8d04 100644 --- a/internal/admin/handlers/user_profile_handler.go +++ b/internal/admin/handlers/user_profile_handler.go @@ -8,8 +8,8 @@ import ( "github.com/labstack/echo/v4" "gorm.io/gorm" - "github.com/treytartt/casera-api/internal/admin/dto" - "github.com/treytartt/casera-api/internal/models" + "github.com/treytartt/honeydue-api/internal/admin/dto" + "github.com/treytartt/honeydue-api/internal/models" ) // AdminUserProfileHandler handles admin user profile management endpoints diff --git a/internal/admin/routes.go b/internal/admin/routes.go index 3b57e93..c240965 100644 --- a/internal/admin/routes.go +++ b/internal/admin/routes.go @@ -9,13 +9,13 @@ import ( "github.com/labstack/echo/v4" "gorm.io/gorm" - "github.com/treytartt/casera-api/internal/admin/handlers" - "github.com/treytartt/casera-api/internal/config" - "github.com/treytartt/casera-api/internal/middleware" - "github.com/treytartt/casera-api/internal/monitoring" - "github.com/treytartt/casera-api/internal/push" - "github.com/treytartt/casera-api/internal/repositories" - "github.com/treytartt/casera-api/internal/services" + "github.com/treytartt/honeydue-api/internal/admin/handlers" + "github.com/treytartt/honeydue-api/internal/config" + "github.com/treytartt/honeydue-api/internal/middleware" + "github.com/treytartt/honeydue-api/internal/monitoring" + "github.com/treytartt/honeydue-api/internal/push" + "github.com/treytartt/honeydue-api/internal/repositories" + "github.com/treytartt/honeydue-api/internal/services" ) // Dependencies holds optional services for admin routes diff --git a/internal/apperrors/handler.go b/internal/apperrors/handler.go index 08ed56c..d545ea0 100644 --- a/internal/apperrors/handler.go +++ b/internal/apperrors/handler.go @@ -9,9 +9,9 @@ import ( "github.com/labstack/echo/v4" "github.com/rs/zerolog/log" - "github.com/treytartt/casera-api/internal/dto/responses" - "github.com/treytartt/casera-api/internal/i18n" - customvalidator "github.com/treytartt/casera-api/internal/validator" + "github.com/treytartt/honeydue-api/internal/dto/responses" + "github.com/treytartt/honeydue-api/internal/i18n" + customvalidator "github.com/treytartt/honeydue-api/internal/validator" ) // HTTPErrorHandler handles all errors returned from handlers in a consistent way. diff --git a/internal/config/config.go b/internal/config/config.go index ccfc2b9..7fbd7c0 100644 --- a/internal/config/config.go +++ b/internal/config/config.go @@ -36,7 +36,7 @@ type ServerConfig struct { CorsAllowedOrigins []string // Comma-separated origins for CORS (production only; debug uses wildcard) Timezone string StaticDir string // Directory for static landing page files - BaseURL string // Public base URL for email tracking links (e.g., https://casera.app) + BaseURL string // Public base URL for email tracking links (e.g., https://honeyDue.treytartt.com) } type DatabaseConfig struct { @@ -80,7 +80,7 @@ type PushConfig struct { } type AppleAuthConfig struct { - ClientID string // Bundle ID (e.g., com.tt.casera.CaseraDev) + ClientID string // Bundle ID (e.g., com.tt.honeyDue.honeyDueDev) TeamID string // Apple Developer Team ID } @@ -95,14 +95,14 @@ type AppleIAPConfig struct { KeyPath string // Path to .p8 private key file KeyID string // Key ID from App Store Connect IssuerID string // Issuer ID from App Store Connect - BundleID string // App bundle ID (e.g., com.tt.casera) + BundleID string // App bundle ID (e.g., com.tt.honeyDue) Sandbox bool // Use sandbox environment for testing } // GoogleIAPConfig holds Google Play Developer API configuration type GoogleIAPConfig struct { ServiceAccountPath string // Path to service account JSON file - PackageName string // Android package name (e.g., com.tt.casera) + PackageName string // Android package name (e.g., com.tt.honeyDue) } // StripeConfig holds Stripe payment configuration @@ -293,13 +293,13 @@ func setDefaults() { viper.SetDefault("ALLOWED_HOSTS", "localhost,127.0.0.1") viper.SetDefault("TIMEZONE", "UTC") viper.SetDefault("STATIC_DIR", "/app/static") - viper.SetDefault("BASE_URL", "https://casera.app") + viper.SetDefault("BASE_URL", "https://honeyDue.treytartt.com") // Database defaults viper.SetDefault("DB_HOST", "localhost") viper.SetDefault("DB_PORT", 5432) viper.SetDefault("POSTGRES_USER", "postgres") - viper.SetDefault("POSTGRES_DB", "casera") + viper.SetDefault("POSTGRES_DB", "honeydue") viper.SetDefault("DB_SSLMODE", "disable") viper.SetDefault("DB_MAX_OPEN_CONNS", 25) viper.SetDefault("DB_MAX_IDLE_CONNS", 10) @@ -315,10 +315,10 @@ func setDefaults() { viper.SetDefault("EMAIL_USE_TLS", true) viper.SetDefault("EMAIL_HOST_USER", "") viper.SetDefault("EMAIL_HOST_PASSWORD", "") - viper.SetDefault("DEFAULT_FROM_EMAIL", "Casera ") + viper.SetDefault("DEFAULT_FROM_EMAIL", "honeyDue ") // Push notification defaults - viper.SetDefault("APNS_TOPIC", "com.example.casera") + viper.SetDefault("APNS_TOPIC", "com.tt.honeyDue") viper.SetDefault("APNS_USE_SANDBOX", true) viper.SetDefault("APNS_PRODUCTION", false) diff --git a/internal/database/database.go b/internal/database/database.go index e7431db..2fd161f 100644 --- a/internal/database/database.go +++ b/internal/database/database.go @@ -9,8 +9,8 @@ import ( "gorm.io/gorm" "gorm.io/gorm/logger" - "github.com/treytartt/casera-api/internal/config" - "github.com/treytartt/casera-api/internal/models" + "github.com/treytartt/honeydue-api/internal/config" + "github.com/treytartt/honeydue-api/internal/models" ) // zerologGormWriter adapts zerolog for GORM's logger interface @@ -422,7 +422,7 @@ func migrateGoAdmin() error { (2, 1, 3, 'Permissions', 'fa-ban', '/info/goadmin_permissions', ''), (2, 1, 4, 'Menu', 'fa-bars', '/menu', ''), (2, 1, 5, 'Operation Log', 'fa-history', '/info/goadmin_operation_log', ''), - (0, 1, 3, 'MyCrib', 'fa-home', '', ''), + (0, 1, 3, 'HoneyDue', 'fa-home', '', ''), (8, 1, 1, 'Users', 'fa-user', '/info/users', ''), (8, 1, 2, 'Residences', 'fa-building', '/info/residences', ''), (8, 1, 3, 'Tasks', 'fa-tasks', '/info/tasks', ''), @@ -444,14 +444,14 @@ func migrateGoAdmin() error { // Seed default Next.js admin user only on first run. // Password is NOT reset on subsequent migrations to preserve operator changes. var adminCount int64 - db.Raw(`SELECT COUNT(*) FROM admin_users WHERE email = 'admin@mycrib.com'`).Scan(&adminCount) + db.Raw(`SELECT COUNT(*) FROM admin_users WHERE email = 'admin@honeydue.com'`).Scan(&adminCount) if adminCount == 0 { log.Info().Msg("Seeding default admin user for Next.js admin panel...") db.Exec(` INSERT INTO admin_users (email, password, first_name, last_name, role, is_active, created_at, updated_at) - VALUES ('admin@mycrib.com', '$2a$10$t5hGjdXQLxr9Z0193qx.Tef6hd1vYI3JvrfX/piKx2qS9UvQ41I9O', 'Admin', 'User', 'super_admin', true, NOW(), NOW()) + VALUES ('admin@honeydue.com', '$2a$10$t5hGjdXQLxr9Z0193qx.Tef6hd1vYI3JvrfX/piKx2qS9UvQ41I9O', 'Admin', 'User', 'super_admin', true, NOW(), NOW()) `) - log.Info().Msg("Default admin user created: admin@mycrib.com") + log.Info().Msg("Default admin user created: admin@honeydue.com") } return nil diff --git a/internal/dto/requests/document.go b/internal/dto/requests/document.go index 416c710..4dee0e9 100644 --- a/internal/dto/requests/document.go +++ b/internal/dto/requests/document.go @@ -5,7 +5,7 @@ import ( "github.com/shopspring/decimal" - "github.com/treytartt/casera-api/internal/models" + "github.com/treytartt/honeydue-api/internal/models" ) // CreateDocumentRequest represents the request to create a document diff --git a/internal/dto/responses/auth.go b/internal/dto/responses/auth.go index 3d12bde..4c2fa46 100644 --- a/internal/dto/responses/auth.go +++ b/internal/dto/responses/auth.go @@ -3,7 +3,7 @@ package responses import ( "time" - "github.com/treytartt/casera-api/internal/models" + "github.com/treytartt/honeydue-api/internal/models" ) // UserResponse represents a user in API responses diff --git a/internal/dto/responses/contractor.go b/internal/dto/responses/contractor.go index 2ba156d..bc77684 100644 --- a/internal/dto/responses/contractor.go +++ b/internal/dto/responses/contractor.go @@ -3,7 +3,7 @@ package responses import ( "time" - "github.com/treytartt/casera-api/internal/models" + "github.com/treytartt/honeydue-api/internal/models" ) // ContractorSpecialtyResponse represents a contractor specialty diff --git a/internal/dto/responses/document.go b/internal/dto/responses/document.go index fa38ca3..63cf69f 100644 --- a/internal/dto/responses/document.go +++ b/internal/dto/responses/document.go @@ -6,7 +6,7 @@ import ( "github.com/shopspring/decimal" - "github.com/treytartt/casera-api/internal/models" + "github.com/treytartt/honeydue-api/internal/models" ) // DocumentUserResponse represents a user in document context diff --git a/internal/dto/responses/residence.go b/internal/dto/responses/residence.go index ac16a40..95b6cf4 100644 --- a/internal/dto/responses/residence.go +++ b/internal/dto/responses/residence.go @@ -5,7 +5,7 @@ import ( "github.com/shopspring/decimal" - "github.com/treytartt/casera-api/internal/models" + "github.com/treytartt/honeydue-api/internal/models" ) // ResidenceTypeResponse represents a residence type in the API response @@ -106,7 +106,7 @@ type GenerateShareCodeResponse struct { } // SharePackageResponse represents the response for generating a share package -// This contains the share code plus metadata for the .casera file +// This contains the share code plus metadata for the .honeydue file type SharePackageResponse struct { ShareCode string `json:"share_code"` ResidenceName string `json:"residence_name"` diff --git a/internal/dto/responses/task.go b/internal/dto/responses/task.go index 83d7d40..fc1fac3 100644 --- a/internal/dto/responses/task.go +++ b/internal/dto/responses/task.go @@ -6,9 +6,9 @@ import ( "github.com/shopspring/decimal" - "github.com/treytartt/casera-api/internal/models" - "github.com/treytartt/casera-api/internal/task/categorization" - "github.com/treytartt/casera-api/internal/task/predicates" + "github.com/treytartt/honeydue-api/internal/models" + "github.com/treytartt/honeydue-api/internal/task/categorization" + "github.com/treytartt/honeydue-api/internal/task/predicates" ) // TaskCategoryResponse represents a task category diff --git a/internal/dto/responses/task_template.go b/internal/dto/responses/task_template.go index 8daa279..50958fe 100644 --- a/internal/dto/responses/task_template.go +++ b/internal/dto/responses/task_template.go @@ -4,7 +4,7 @@ import ( "strings" "time" - "github.com/treytartt/casera-api/internal/models" + "github.com/treytartt/honeydue-api/internal/models" ) // TaskTemplateResponse represents a task template in the API response diff --git a/internal/handlers/auth_handler.go b/internal/handlers/auth_handler.go index 32c6477..2d6b367 100644 --- a/internal/handlers/auth_handler.go +++ b/internal/handlers/auth_handler.go @@ -7,12 +7,12 @@ import ( "github.com/labstack/echo/v4" "github.com/rs/zerolog/log" - "github.com/treytartt/casera-api/internal/apperrors" - "github.com/treytartt/casera-api/internal/dto/requests" - "github.com/treytartt/casera-api/internal/dto/responses" - "github.com/treytartt/casera-api/internal/middleware" - "github.com/treytartt/casera-api/internal/services" - "github.com/treytartt/casera-api/internal/validator" + "github.com/treytartt/honeydue-api/internal/apperrors" + "github.com/treytartt/honeydue-api/internal/dto/requests" + "github.com/treytartt/honeydue-api/internal/dto/responses" + "github.com/treytartt/honeydue-api/internal/middleware" + "github.com/treytartt/honeydue-api/internal/services" + "github.com/treytartt/honeydue-api/internal/validator" ) // AuthHandler handles authentication endpoints diff --git a/internal/handlers/auth_handler_test.go b/internal/handlers/auth_handler_test.go index ba78aa2..0dba5b5 100644 --- a/internal/handlers/auth_handler_test.go +++ b/internal/handlers/auth_handler_test.go @@ -10,11 +10,11 @@ import ( "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" - "github.com/treytartt/casera-api/internal/config" - "github.com/treytartt/casera-api/internal/dto/requests" - "github.com/treytartt/casera-api/internal/repositories" - "github.com/treytartt/casera-api/internal/services" - "github.com/treytartt/casera-api/internal/testutil" + "github.com/treytartt/honeydue-api/internal/config" + "github.com/treytartt/honeydue-api/internal/dto/requests" + "github.com/treytartt/honeydue-api/internal/repositories" + "github.com/treytartt/honeydue-api/internal/services" + "github.com/treytartt/honeydue-api/internal/testutil" ) func setupAuthHandler(t *testing.T) (*AuthHandler, *echo.Echo, *repositories.UserRepository) { diff --git a/internal/handlers/contractor_handler.go b/internal/handlers/contractor_handler.go index 603c3b2..0fb67a5 100644 --- a/internal/handlers/contractor_handler.go +++ b/internal/handlers/contractor_handler.go @@ -6,10 +6,10 @@ import ( "github.com/labstack/echo/v4" - "github.com/treytartt/casera-api/internal/apperrors" - "github.com/treytartt/casera-api/internal/dto/requests" - "github.com/treytartt/casera-api/internal/middleware" - "github.com/treytartt/casera-api/internal/services" + "github.com/treytartt/honeydue-api/internal/apperrors" + "github.com/treytartt/honeydue-api/internal/dto/requests" + "github.com/treytartt/honeydue-api/internal/middleware" + "github.com/treytartt/honeydue-api/internal/services" ) // ContractorHandler handles contractor-related HTTP requests diff --git a/internal/handlers/contractor_handler_test.go b/internal/handlers/contractor_handler_test.go index 2495870..4b0b402 100644 --- a/internal/handlers/contractor_handler_test.go +++ b/internal/handlers/contractor_handler_test.go @@ -10,10 +10,10 @@ import ( "github.com/stretchr/testify/require" "gorm.io/gorm" - "github.com/treytartt/casera-api/internal/dto/requests" - "github.com/treytartt/casera-api/internal/repositories" - "github.com/treytartt/casera-api/internal/services" - "github.com/treytartt/casera-api/internal/testutil" + "github.com/treytartt/honeydue-api/internal/dto/requests" + "github.com/treytartt/honeydue-api/internal/repositories" + "github.com/treytartt/honeydue-api/internal/services" + "github.com/treytartt/honeydue-api/internal/testutil" ) func setupContractorHandler(t *testing.T) (*ContractorHandler, *echo.Echo, *gorm.DB) { diff --git a/internal/handlers/document_handler.go b/internal/handlers/document_handler.go index 9032342..0237424 100644 --- a/internal/handlers/document_handler.go +++ b/internal/handlers/document_handler.go @@ -10,12 +10,12 @@ import ( "github.com/labstack/echo/v4" "github.com/shopspring/decimal" - "github.com/treytartt/casera-api/internal/apperrors" - "github.com/treytartt/casera-api/internal/dto/requests" - "github.com/treytartt/casera-api/internal/middleware" - "github.com/treytartt/casera-api/internal/models" - "github.com/treytartt/casera-api/internal/repositories" - "github.com/treytartt/casera-api/internal/services" + "github.com/treytartt/honeydue-api/internal/apperrors" + "github.com/treytartt/honeydue-api/internal/dto/requests" + "github.com/treytartt/honeydue-api/internal/middleware" + "github.com/treytartt/honeydue-api/internal/models" + "github.com/treytartt/honeydue-api/internal/repositories" + "github.com/treytartt/honeydue-api/internal/services" ) // DocumentHandler handles document-related HTTP requests diff --git a/internal/handlers/document_handler_test.go b/internal/handlers/document_handler_test.go index 76054e5..8fcc8ae 100644 --- a/internal/handlers/document_handler_test.go +++ b/internal/handlers/document_handler_test.go @@ -10,10 +10,10 @@ import ( "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" - "github.com/treytartt/casera-api/internal/models" - "github.com/treytartt/casera-api/internal/repositories" - "github.com/treytartt/casera-api/internal/services" - "github.com/treytartt/casera-api/internal/testutil" + "github.com/treytartt/honeydue-api/internal/models" + "github.com/treytartt/honeydue-api/internal/repositories" + "github.com/treytartt/honeydue-api/internal/services" + "github.com/treytartt/honeydue-api/internal/testutil" "gorm.io/gorm" ) diff --git a/internal/handlers/media_handler.go b/internal/handlers/media_handler.go index 3f878af..9c44b5e 100644 --- a/internal/handlers/media_handler.go +++ b/internal/handlers/media_handler.go @@ -6,10 +6,10 @@ import ( "github.com/labstack/echo/v4" - "github.com/treytartt/casera-api/internal/apperrors" - "github.com/treytartt/casera-api/internal/middleware" - "github.com/treytartt/casera-api/internal/repositories" - "github.com/treytartt/casera-api/internal/services" + "github.com/treytartt/honeydue-api/internal/apperrors" + "github.com/treytartt/honeydue-api/internal/middleware" + "github.com/treytartt/honeydue-api/internal/repositories" + "github.com/treytartt/honeydue-api/internal/services" ) // MediaHandler handles authenticated media serving diff --git a/internal/handlers/media_handler_test.go b/internal/handlers/media_handler_test.go index c0a6bf5..3e317ab 100644 --- a/internal/handlers/media_handler_test.go +++ b/internal/handlers/media_handler_test.go @@ -6,8 +6,8 @@ import ( "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" - "github.com/treytartt/casera-api/internal/config" - "github.com/treytartt/casera-api/internal/services" + "github.com/treytartt/honeydue-api/internal/config" + "github.com/treytartt/honeydue-api/internal/services" ) // newTestStorageService creates a StorageService with a known upload directory for testing. diff --git a/internal/handlers/noauth_test.go b/internal/handlers/noauth_test.go index df2c2dd..abeb9a4 100644 --- a/internal/handlers/noauth_test.go +++ b/internal/handlers/noauth_test.go @@ -4,10 +4,10 @@ import ( "net/http" "testing" - "github.com/treytartt/casera-api/internal/config" - "github.com/treytartt/casera-api/internal/repositories" - "github.com/treytartt/casera-api/internal/services" - "github.com/treytartt/casera-api/internal/testutil" + "github.com/treytartt/honeydue-api/internal/config" + "github.com/treytartt/honeydue-api/internal/repositories" + "github.com/treytartt/honeydue-api/internal/services" + "github.com/treytartt/honeydue-api/internal/testutil" ) // TestTaskHandler_NoAuth_Returns401 verifies that task handler endpoints return diff --git a/internal/handlers/notification_handler.go b/internal/handlers/notification_handler.go index 5379974..309c1a3 100644 --- a/internal/handlers/notification_handler.go +++ b/internal/handlers/notification_handler.go @@ -6,9 +6,9 @@ import ( "github.com/labstack/echo/v4" - "github.com/treytartt/casera-api/internal/apperrors" - "github.com/treytartt/casera-api/internal/middleware" - "github.com/treytartt/casera-api/internal/services" + "github.com/treytartt/honeydue-api/internal/apperrors" + "github.com/treytartt/honeydue-api/internal/middleware" + "github.com/treytartt/honeydue-api/internal/services" ) // NotificationHandler handles notification-related HTTP requests diff --git a/internal/handlers/notification_handler_test.go b/internal/handlers/notification_handler_test.go index a1c6209..8135671 100644 --- a/internal/handlers/notification_handler_test.go +++ b/internal/handlers/notification_handler_test.go @@ -11,10 +11,10 @@ import ( "github.com/stretchr/testify/require" "gorm.io/gorm" - "github.com/treytartt/casera-api/internal/models" - "github.com/treytartt/casera-api/internal/repositories" - "github.com/treytartt/casera-api/internal/services" - "github.com/treytartt/casera-api/internal/testutil" + "github.com/treytartt/honeydue-api/internal/models" + "github.com/treytartt/honeydue-api/internal/repositories" + "github.com/treytartt/honeydue-api/internal/services" + "github.com/treytartt/honeydue-api/internal/testutil" ) func setupNotificationHandler(t *testing.T) (*NotificationHandler, *echo.Echo, *gorm.DB) { diff --git a/internal/handlers/residence_handler.go b/internal/handlers/residence_handler.go index be94023..971bca8 100644 --- a/internal/handlers/residence_handler.go +++ b/internal/handlers/residence_handler.go @@ -6,12 +6,12 @@ import ( "github.com/labstack/echo/v4" - "github.com/treytartt/casera-api/internal/apperrors" - "github.com/treytartt/casera-api/internal/dto/requests" - "github.com/treytartt/casera-api/internal/i18n" - "github.com/treytartt/casera-api/internal/middleware" - "github.com/treytartt/casera-api/internal/services" - "github.com/treytartt/casera-api/internal/validator" + "github.com/treytartt/honeydue-api/internal/apperrors" + "github.com/treytartt/honeydue-api/internal/dto/requests" + "github.com/treytartt/honeydue-api/internal/i18n" + "github.com/treytartt/honeydue-api/internal/middleware" + "github.com/treytartt/honeydue-api/internal/services" + "github.com/treytartt/honeydue-api/internal/validator" ) // ResidenceHandler handles residence-related HTTP requests @@ -221,7 +221,7 @@ func (h *ResidenceHandler) GenerateShareCode(c echo.Context) error { } // GenerateSharePackage handles POST /api/residences/:id/generate-share-package/ -// Returns a share code with metadata for creating a .casera package file +// Returns a share code with metadata for creating a .honeydue package file func (h *ResidenceHandler) GenerateSharePackage(c echo.Context) error { user, err := middleware.MustGetAuthUser(c) if err != nil { diff --git a/internal/handlers/residence_handler_test.go b/internal/handlers/residence_handler_test.go index e6eddcc..fedacb9 100644 --- a/internal/handlers/residence_handler_test.go +++ b/internal/handlers/residence_handler_test.go @@ -11,11 +11,11 @@ import ( "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" - "github.com/treytartt/casera-api/internal/config" - "github.com/treytartt/casera-api/internal/dto/requests" - "github.com/treytartt/casera-api/internal/repositories" - "github.com/treytartt/casera-api/internal/services" - "github.com/treytartt/casera-api/internal/testutil" + "github.com/treytartt/honeydue-api/internal/config" + "github.com/treytartt/honeydue-api/internal/dto/requests" + "github.com/treytartt/honeydue-api/internal/repositories" + "github.com/treytartt/honeydue-api/internal/services" + "github.com/treytartt/honeydue-api/internal/testutil" "gorm.io/gorm" ) diff --git a/internal/handlers/static_data_handler.go b/internal/handlers/static_data_handler.go index 070d53e..75b055b 100644 --- a/internal/handlers/static_data_handler.go +++ b/internal/handlers/static_data_handler.go @@ -8,9 +8,9 @@ import ( "github.com/redis/go-redis/v9" "github.com/rs/zerolog/log" - "github.com/treytartt/casera-api/internal/dto/responses" - "github.com/treytartt/casera-api/internal/i18n" - "github.com/treytartt/casera-api/internal/services" + "github.com/treytartt/honeydue-api/internal/dto/responses" + "github.com/treytartt/honeydue-api/internal/i18n" + "github.com/treytartt/honeydue-api/internal/services" ) // SeededDataResponse represents the unified seeded data response diff --git a/internal/handlers/subscription_handler.go b/internal/handlers/subscription_handler.go index 2fdb203..f8d3a50 100644 --- a/internal/handlers/subscription_handler.go +++ b/internal/handlers/subscription_handler.go @@ -5,9 +5,9 @@ import ( "github.com/labstack/echo/v4" - "github.com/treytartt/casera-api/internal/apperrors" - "github.com/treytartt/casera-api/internal/middleware" - "github.com/treytartt/casera-api/internal/services" + "github.com/treytartt/honeydue-api/internal/apperrors" + "github.com/treytartt/honeydue-api/internal/middleware" + "github.com/treytartt/honeydue-api/internal/services" ) // SubscriptionHandler handles subscription-related HTTP requests diff --git a/internal/handlers/subscription_webhook_handler.go b/internal/handlers/subscription_webhook_handler.go index 88f623d..61b61db 100644 --- a/internal/handlers/subscription_webhook_handler.go +++ b/internal/handlers/subscription_webhook_handler.go @@ -17,10 +17,10 @@ import ( "github.com/labstack/echo/v4" "github.com/rs/zerolog/log" - "github.com/treytartt/casera-api/internal/config" - "github.com/treytartt/casera-api/internal/models" - "github.com/treytartt/casera-api/internal/repositories" - "github.com/treytartt/casera-api/internal/services" + "github.com/treytartt/honeydue-api/internal/config" + "github.com/treytartt/honeydue-api/internal/models" + "github.com/treytartt/honeydue-api/internal/repositories" + "github.com/treytartt/honeydue-api/internal/services" ) // SubscriptionWebhookHandler handles subscription webhook callbacks diff --git a/internal/handlers/task_handler.go b/internal/handlers/task_handler.go index 441641b..32df60c 100644 --- a/internal/handlers/task_handler.go +++ b/internal/handlers/task_handler.go @@ -9,10 +9,10 @@ import ( "github.com/labstack/echo/v4" "github.com/shopspring/decimal" - "github.com/treytartt/casera-api/internal/apperrors" - "github.com/treytartt/casera-api/internal/dto/requests" - "github.com/treytartt/casera-api/internal/middleware" - "github.com/treytartt/casera-api/internal/services" + "github.com/treytartt/honeydue-api/internal/apperrors" + "github.com/treytartt/honeydue-api/internal/dto/requests" + "github.com/treytartt/honeydue-api/internal/middleware" + "github.com/treytartt/honeydue-api/internal/services" ) // TaskHandler handles task-related HTTP requests diff --git a/internal/handlers/task_handler_test.go b/internal/handlers/task_handler_test.go index 28d93cc..bd7c353 100644 --- a/internal/handlers/task_handler_test.go +++ b/internal/handlers/task_handler_test.go @@ -12,11 +12,11 @@ import ( "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" - "github.com/treytartt/casera-api/internal/dto/requests" - "github.com/treytartt/casera-api/internal/models" - "github.com/treytartt/casera-api/internal/repositories" - "github.com/treytartt/casera-api/internal/services" - "github.com/treytartt/casera-api/internal/testutil" + "github.com/treytartt/honeydue-api/internal/dto/requests" + "github.com/treytartt/honeydue-api/internal/models" + "github.com/treytartt/honeydue-api/internal/repositories" + "github.com/treytartt/honeydue-api/internal/services" + "github.com/treytartt/honeydue-api/internal/testutil" "gorm.io/gorm" ) diff --git a/internal/handlers/task_template_handler.go b/internal/handlers/task_template_handler.go index 4690eb8..04a6b3c 100644 --- a/internal/handlers/task_template_handler.go +++ b/internal/handlers/task_template_handler.go @@ -6,8 +6,8 @@ import ( "github.com/labstack/echo/v4" - "github.com/treytartt/casera-api/internal/apperrors" - "github.com/treytartt/casera-api/internal/services" + "github.com/treytartt/honeydue-api/internal/apperrors" + "github.com/treytartt/honeydue-api/internal/services" ) // TaskTemplateHandler handles task template endpoints diff --git a/internal/handlers/tracking_handler.go b/internal/handlers/tracking_handler.go index 95cd2a5..64b731b 100644 --- a/internal/handlers/tracking_handler.go +++ b/internal/handlers/tracking_handler.go @@ -7,7 +7,7 @@ import ( "github.com/labstack/echo/v4" "github.com/rs/zerolog/log" - "github.com/treytartt/casera-api/internal/services" + "github.com/treytartt/honeydue-api/internal/services" ) // TrackingHandler handles email tracking endpoints diff --git a/internal/handlers/upload_handler.go b/internal/handlers/upload_handler.go index 734c396..9532c21 100644 --- a/internal/handlers/upload_handler.go +++ b/internal/handlers/upload_handler.go @@ -6,10 +6,10 @@ import ( "github.com/labstack/echo/v4" "github.com/rs/zerolog/log" - "github.com/treytartt/casera-api/internal/apperrors" - "github.com/treytartt/casera-api/internal/middleware" - "github.com/treytartt/casera-api/internal/models" - "github.com/treytartt/casera-api/internal/services" + "github.com/treytartt/honeydue-api/internal/apperrors" + "github.com/treytartt/honeydue-api/internal/middleware" + "github.com/treytartt/honeydue-api/internal/models" + "github.com/treytartt/honeydue-api/internal/services" ) // UploadHandler handles file upload endpoints diff --git a/internal/handlers/upload_handler_test.go b/internal/handlers/upload_handler_test.go index c4065fc..a9ed33b 100644 --- a/internal/handlers/upload_handler_test.go +++ b/internal/handlers/upload_handler_test.go @@ -4,8 +4,8 @@ import ( "net/http" "testing" - "github.com/treytartt/casera-api/internal/i18n" - "github.com/treytartt/casera-api/internal/testutil" + "github.com/treytartt/honeydue-api/internal/i18n" + "github.com/treytartt/honeydue-api/internal/testutil" ) func init() { diff --git a/internal/handlers/user_handler.go b/internal/handlers/user_handler.go index 545e520..7388eb8 100644 --- a/internal/handlers/user_handler.go +++ b/internal/handlers/user_handler.go @@ -6,9 +6,9 @@ import ( "github.com/labstack/echo/v4" - "github.com/treytartt/casera-api/internal/apperrors" - "github.com/treytartt/casera-api/internal/middleware" - "github.com/treytartt/casera-api/internal/services" + "github.com/treytartt/honeydue-api/internal/apperrors" + "github.com/treytartt/honeydue-api/internal/middleware" + "github.com/treytartt/honeydue-api/internal/services" ) // UserHandler handles user-related HTTP requests diff --git a/internal/i18n/translations/de.json b/internal/i18n/translations/de.json index 4428d00..034ebc1 100644 --- a/internal/i18n/translations/de.json +++ b/internal/i18n/translations/de.json @@ -130,7 +130,7 @@ "push.residence_shared.title": "Immobilie Geteilt", "push.residence_shared.body": "{{.UserName}} hat {{.ResidenceName}} mit Ihnen geteilt", - "email.welcome.subject": "Willkommen bei Casera!", + "email.welcome.subject": "Willkommen bei honeyDue!", "email.verification.subject": "Bestatigen Sie Ihre E-Mail", "email.password_reset.subject": "Passwort-Zurucksetzungscode", "email.tasks_report.subject": "Aufgabenbericht fur {{.ResidenceName}}", diff --git a/internal/i18n/translations/en.json b/internal/i18n/translations/en.json index 5a5d59b..2adb7af 100644 --- a/internal/i18n/translations/en.json +++ b/internal/i18n/translations/en.json @@ -133,7 +133,7 @@ "push.residence_shared.title": "Property Shared", "push.residence_shared.body": "{{.UserName}} shared {{.ResidenceName}} with you", - "email.welcome.subject": "Welcome to Casera!", + "email.welcome.subject": "Welcome to honeyDue!", "email.verification.subject": "Verify Your Email", "email.password_reset.subject": "Password Reset Code", "email.tasks_report.subject": "Tasks Report for {{.ResidenceName}}", diff --git a/internal/i18n/translations/es.json b/internal/i18n/translations/es.json index d45c4a4..f5e78f0 100644 --- a/internal/i18n/translations/es.json +++ b/internal/i18n/translations/es.json @@ -130,7 +130,7 @@ "push.residence_shared.title": "Propiedad Compartida", "push.residence_shared.body": "{{.UserName}} compartio {{.ResidenceName}} contigo", - "email.welcome.subject": "Bienvenido a Casera!", + "email.welcome.subject": "Bienvenido a honeyDue!", "email.verification.subject": "Verifica Tu Correo Electronico", "email.password_reset.subject": "Codigo de Restablecimiento de Contrasena", "email.tasks_report.subject": "Informe de Tareas para {{.ResidenceName}}", diff --git a/internal/i18n/translations/fr.json b/internal/i18n/translations/fr.json index 8005ee8..6a4561c 100644 --- a/internal/i18n/translations/fr.json +++ b/internal/i18n/translations/fr.json @@ -130,7 +130,7 @@ "push.residence_shared.title": "Propriete Partagee", "push.residence_shared.body": "{{.UserName}} a partage {{.ResidenceName}} avec vous", - "email.welcome.subject": "Bienvenue sur Casera !", + "email.welcome.subject": "Bienvenue sur honeyDue !", "email.verification.subject": "Verifiez Votre Email", "email.password_reset.subject": "Code de Reinitialisation de Mot de Passe", "email.tasks_report.subject": "Rapport de Taches pour {{.ResidenceName}}", diff --git a/internal/i18n/translations/it.json b/internal/i18n/translations/it.json index 1fe71f6..ad42c18 100644 --- a/internal/i18n/translations/it.json +++ b/internal/i18n/translations/it.json @@ -130,7 +130,7 @@ "push.residence_shared.title": "Immobile Condiviso", "push.residence_shared.body": "{{.UserName}} ha condiviso {{.ResidenceName}} con te", - "email.welcome.subject": "Benvenuto su Casera!", + "email.welcome.subject": "Benvenuto su honeyDue!", "email.verification.subject": "Verifica la Tua Email", "email.password_reset.subject": "Codice di Reimpostazione Password", "email.tasks_report.subject": "Report Attività per {{.ResidenceName}}", diff --git a/internal/i18n/translations/ja.json b/internal/i18n/translations/ja.json index e4f85c2..eabfa97 100644 --- a/internal/i18n/translations/ja.json +++ b/internal/i18n/translations/ja.json @@ -130,7 +130,7 @@ "push.residence_shared.title": "物件が共有されました", "push.residence_shared.body": "{{.UserName}} が {{.ResidenceName}} を共有しました", - "email.welcome.subject": "Casera へようこそ!", + "email.welcome.subject": "honeyDue へようこそ!", "email.verification.subject": "メールアドレスの認証", "email.password_reset.subject": "パスワードリセットコード", "email.tasks_report.subject": "{{.ResidenceName}} のタスクレポート", diff --git a/internal/i18n/translations/ko.json b/internal/i18n/translations/ko.json index b2b8491..c1629b8 100644 --- a/internal/i18n/translations/ko.json +++ b/internal/i18n/translations/ko.json @@ -130,7 +130,7 @@ "push.residence_shared.title": "주거지 공유", "push.residence_shared.body": "{{.UserName}}님이 {{.ResidenceName}}을(를) 공유했습니다", - "email.welcome.subject": "Casera에 오신 것을 환영합니다!", + "email.welcome.subject": "honeyDue에 오신 것을 환영합니다!", "email.verification.subject": "이메일 인증", "email.password_reset.subject": "비밀번호 재설정 코드", "email.tasks_report.subject": "{{.ResidenceName}} 작업 보고서", diff --git a/internal/i18n/translations/nl.json b/internal/i18n/translations/nl.json index b7d7dff..7d72a4b 100644 --- a/internal/i18n/translations/nl.json +++ b/internal/i18n/translations/nl.json @@ -130,7 +130,7 @@ "push.residence_shared.title": "Woning Gedeeld", "push.residence_shared.body": "{{.UserName}} heeft {{.ResidenceName}} met u gedeeld", - "email.welcome.subject": "Welkom bij Casera!", + "email.welcome.subject": "Welkom bij honeyDue!", "email.verification.subject": "Verifieer Uw E-mailadres", "email.password_reset.subject": "Wachtwoord Resetcode", "email.tasks_report.subject": "Takenrapport voor {{.ResidenceName}}", diff --git a/internal/i18n/translations/pt.json b/internal/i18n/translations/pt.json index 7b8091e..80f07ae 100644 --- a/internal/i18n/translations/pt.json +++ b/internal/i18n/translations/pt.json @@ -130,7 +130,7 @@ "push.residence_shared.title": "Propriedade Compartilhada", "push.residence_shared.body": "{{.UserName}} compartilhou {{.ResidenceName}} com voce", - "email.welcome.subject": "Bem-vindo ao Casera!", + "email.welcome.subject": "Bem-vindo ao honeyDue!", "email.verification.subject": "Verifique Seu Email", "email.password_reset.subject": "Codigo de Redefinicao de Senha", "email.tasks_report.subject": "Relatorio de Tarefas para {{.ResidenceName}}", diff --git a/internal/i18n/translations/zh.json b/internal/i18n/translations/zh.json index 686ef2e..b7047f0 100644 --- a/internal/i18n/translations/zh.json +++ b/internal/i18n/translations/zh.json @@ -130,7 +130,7 @@ "push.residence_shared.title": "房产已分享", "push.residence_shared.body": "{{.UserName}} 与您分享了 {{.ResidenceName}}", - "email.welcome.subject": "欢迎使用 Casera!", + "email.welcome.subject": "欢迎使用 honeyDue!", "email.verification.subject": "验证您的邮箱", "email.password_reset.subject": "密码重置验证码", "email.tasks_report.subject": "{{.ResidenceName}} 的任务报告", diff --git a/internal/integration/contract_test.go b/internal/integration/contract_test.go index c7d3b41..706357f 100644 --- a/internal/integration/contract_test.go +++ b/internal/integration/contract_test.go @@ -11,9 +11,9 @@ import ( "github.com/stretchr/testify/require" "gopkg.in/yaml.v3" - "github.com/treytartt/casera-api/internal/config" - "github.com/treytartt/casera-api/internal/router" - "github.com/treytartt/casera-api/internal/testutil" + "github.com/treytartt/honeydue-api/internal/config" + "github.com/treytartt/honeydue-api/internal/router" + "github.com/treytartt/honeydue-api/internal/testutil" ) // routeKey is a comparable type for route matching: method + path diff --git a/internal/integration/integration_test.go b/internal/integration/integration_test.go index 5ee2d6e..a1e2239 100644 --- a/internal/integration/integration_test.go +++ b/internal/integration/integration_test.go @@ -13,14 +13,14 @@ import ( "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" - "github.com/treytartt/casera-api/internal/apperrors" - "github.com/treytartt/casera-api/internal/config" - "github.com/treytartt/casera-api/internal/handlers" - "github.com/treytartt/casera-api/internal/middleware" - "github.com/treytartt/casera-api/internal/repositories" - "github.com/treytartt/casera-api/internal/services" - "github.com/treytartt/casera-api/internal/testutil" - "github.com/treytartt/casera-api/internal/validator" + "github.com/treytartt/honeydue-api/internal/apperrors" + "github.com/treytartt/honeydue-api/internal/config" + "github.com/treytartt/honeydue-api/internal/handlers" + "github.com/treytartt/honeydue-api/internal/middleware" + "github.com/treytartt/honeydue-api/internal/repositories" + "github.com/treytartt/honeydue-api/internal/services" + "github.com/treytartt/honeydue-api/internal/testutil" + "github.com/treytartt/honeydue-api/internal/validator" "gorm.io/gorm" ) diff --git a/internal/integration/kmp_contract_test.go b/internal/integration/kmp_contract_test.go index e0855d9..388dadd 100644 --- a/internal/integration/kmp_contract_test.go +++ b/internal/integration/kmp_contract_test.go @@ -130,7 +130,7 @@ func extractKMPRoutes(t *testing.T) []routeKey { t.Helper() // KMP source directory relative to this test file - kmpDir := filepath.Join("..", "..", "..", "MyCribKMM", "composeApp", "src", "commonMain", "kotlin", "com", "example", "casera", "network") + kmpDir := filepath.Join("..", "..", "..", "HoneyDueKMM", "composeApp", "src", "commonMain", "kotlin", "com", "example", "honeydue", "network") // Verify directory exists — skip in CI where KMP repo may not be checked out info, err := os.Stat(kmpDir) diff --git a/internal/integration/kmp_model_contract_test.go b/internal/integration/kmp_model_contract_test.go index 628ee8b..6fde43a 100644 --- a/internal/integration/kmp_model_contract_test.go +++ b/internal/integration/kmp_model_contract_test.go @@ -260,7 +260,7 @@ var excludedSchemas = map[string]string{ "DocumentType": "Enum — KMP uses DocumentType enum class", "NotificationType": "Enum — KMP uses String", "ToggleFavoriteResponse": "Simple message+bool, not worth a dedicated mapping", - "SharePackageResponse": "Used for .casera file sharing, handled by SharedContractor", + "SharePackageResponse": "Used for .honeydue file sharing, handled by SharedContractor", "UnregisterDeviceRequest": "Simple oneoff request", "UpdateTaskCompletionRequest": "Not yet used in KMP", "UpgradeTriggerResponse": "Shape differs from KMP UpgradeTriggerData", @@ -507,8 +507,8 @@ var ( func loadKMPModels(t *testing.T) map[string]kmpModel { t.Helper() - modelsDir := filepath.Join("..", "..", "..", "MyCribKMM", "composeApp", "src", "commonMain", - "kotlin", "com", "example", "casera", "models") + modelsDir := filepath.Join("..", "..", "..", "HoneyDueKMM", "composeApp", "src", "commonMain", + "kotlin", "com", "example", "honeydue", "models") info, err := os.Stat(modelsDir) if os.IsNotExist(err) { diff --git a/internal/integration/security_regression_test.go b/internal/integration/security_regression_test.go index 491e7e6..bdf480e 100644 --- a/internal/integration/security_regression_test.go +++ b/internal/integration/security_regression_test.go @@ -14,17 +14,17 @@ import ( "github.com/stretchr/testify/require" "gorm.io/gorm" - "github.com/treytartt/casera-api/internal/admin/dto" - adminhandlers "github.com/treytartt/casera-api/internal/admin/handlers" - "github.com/treytartt/casera-api/internal/apperrors" - "github.com/treytartt/casera-api/internal/config" - "github.com/treytartt/casera-api/internal/handlers" - "github.com/treytartt/casera-api/internal/middleware" - "github.com/treytartt/casera-api/internal/models" - "github.com/treytartt/casera-api/internal/repositories" - "github.com/treytartt/casera-api/internal/services" - "github.com/treytartt/casera-api/internal/testutil" - "github.com/treytartt/casera-api/internal/validator" + "github.com/treytartt/honeydue-api/internal/admin/dto" + adminhandlers "github.com/treytartt/honeydue-api/internal/admin/handlers" + "github.com/treytartt/honeydue-api/internal/apperrors" + "github.com/treytartt/honeydue-api/internal/config" + "github.com/treytartt/honeydue-api/internal/handlers" + "github.com/treytartt/honeydue-api/internal/middleware" + "github.com/treytartt/honeydue-api/internal/models" + "github.com/treytartt/honeydue-api/internal/repositories" + "github.com/treytartt/honeydue-api/internal/services" + "github.com/treytartt/honeydue-api/internal/testutil" + "github.com/treytartt/honeydue-api/internal/validator" ) // ============ Security Regression Test App ============ diff --git a/internal/integration/subscription_is_free_test.go b/internal/integration/subscription_is_free_test.go index f09f32e..5ed9b9d 100644 --- a/internal/integration/subscription_is_free_test.go +++ b/internal/integration/subscription_is_free_test.go @@ -12,15 +12,15 @@ import ( "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" - "github.com/treytartt/casera-api/internal/apperrors" - "github.com/treytartt/casera-api/internal/config" - "github.com/treytartt/casera-api/internal/handlers" - "github.com/treytartt/casera-api/internal/middleware" - "github.com/treytartt/casera-api/internal/models" - "github.com/treytartt/casera-api/internal/repositories" - "github.com/treytartt/casera-api/internal/services" - "github.com/treytartt/casera-api/internal/testutil" - "github.com/treytartt/casera-api/internal/validator" + "github.com/treytartt/honeydue-api/internal/apperrors" + "github.com/treytartt/honeydue-api/internal/config" + "github.com/treytartt/honeydue-api/internal/handlers" + "github.com/treytartt/honeydue-api/internal/middleware" + "github.com/treytartt/honeydue-api/internal/models" + "github.com/treytartt/honeydue-api/internal/repositories" + "github.com/treytartt/honeydue-api/internal/services" + "github.com/treytartt/honeydue-api/internal/testutil" + "github.com/treytartt/honeydue-api/internal/validator" "gorm.io/gorm" ) diff --git a/internal/middleware/admin_auth.go b/internal/middleware/admin_auth.go index 28e5755..afbb02f 100644 --- a/internal/middleware/admin_auth.go +++ b/internal/middleware/admin_auth.go @@ -9,9 +9,9 @@ import ( "github.com/labstack/echo/v4" "github.com/golang-jwt/jwt/v5" - "github.com/treytartt/casera-api/internal/config" - "github.com/treytartt/casera-api/internal/models" - "github.com/treytartt/casera-api/internal/repositories" + "github.com/treytartt/honeydue-api/internal/config" + "github.com/treytartt/honeydue-api/internal/models" + "github.com/treytartt/honeydue-api/internal/repositories" ) const ( diff --git a/internal/middleware/auth.go b/internal/middleware/auth.go index b84f1bd..45c19d9 100644 --- a/internal/middleware/auth.go +++ b/internal/middleware/auth.go @@ -11,9 +11,9 @@ import ( "github.com/rs/zerolog/log" "gorm.io/gorm" - "github.com/treytartt/casera-api/internal/apperrors" - "github.com/treytartt/casera-api/internal/models" - "github.com/treytartt/casera-api/internal/services" + "github.com/treytartt/honeydue-api/internal/apperrors" + "github.com/treytartt/honeydue-api/internal/models" + "github.com/treytartt/honeydue-api/internal/services" ) const ( diff --git a/internal/middleware/auth_safety_test.go b/internal/middleware/auth_safety_test.go index 39afbfe..a6dde67 100644 --- a/internal/middleware/auth_safety_test.go +++ b/internal/middleware/auth_safety_test.go @@ -9,8 +9,8 @@ import ( "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" - "github.com/treytartt/casera-api/internal/config" - "github.com/treytartt/casera-api/internal/models" + "github.com/treytartt/honeydue-api/internal/config" + "github.com/treytartt/honeydue-api/internal/models" ) func TestGetAuthUser_NilContext_ReturnsNil(t *testing.T) { diff --git a/internal/middleware/logger.go b/internal/middleware/logger.go index 8b014a1..53a2863 100644 --- a/internal/middleware/logger.go +++ b/internal/middleware/logger.go @@ -6,7 +6,7 @@ import ( "github.com/labstack/echo/v4" "github.com/rs/zerolog/log" - "github.com/treytartt/casera-api/internal/models" + "github.com/treytartt/honeydue-api/internal/models" ) // StructuredLogger is zerolog-based request logging middleware that includes diff --git a/internal/monitoring/service.go b/internal/monitoring/service.go index e0d360d..1a1d3e0 100644 --- a/internal/monitoring/service.go +++ b/internal/monitoring/service.go @@ -10,7 +10,7 @@ import ( "github.com/rs/zerolog/log" "gorm.io/gorm" - "github.com/treytartt/casera-api/internal/models" + "github.com/treytartt/honeydue-api/internal/models" ) const ( diff --git a/internal/push/apns.go b/internal/push/apns.go index 7517fe2..4a714d7 100644 --- a/internal/push/apns.go +++ b/internal/push/apns.go @@ -9,7 +9,7 @@ import ( "github.com/sideshow/apns2/payload" "github.com/sideshow/apns2/token" - "github.com/treytartt/casera-api/internal/config" + "github.com/treytartt/honeydue-api/internal/config" ) // APNsClient handles direct communication with Apple Push Notification service diff --git a/internal/push/client.go b/internal/push/client.go index 2d015f9..7820466 100644 --- a/internal/push/client.go +++ b/internal/push/client.go @@ -5,7 +5,7 @@ import ( "github.com/rs/zerolog/log" - "github.com/treytartt/casera-api/internal/config" + "github.com/treytartt/honeydue-api/internal/config" ) // Platform constants diff --git a/internal/push/fcm.go b/internal/push/fcm.go index 3f324fa..48c959c 100644 --- a/internal/push/fcm.go +++ b/internal/push/fcm.go @@ -10,7 +10,7 @@ import ( "github.com/rs/zerolog/log" - "github.com/treytartt/casera-api/internal/config" + "github.com/treytartt/honeydue-api/internal/config" ) const fcmEndpoint = "https://fcm.googleapis.com/fcm/send" diff --git a/internal/repositories/admin_repo.go b/internal/repositories/admin_repo.go index e6e3665..43ce6dd 100644 --- a/internal/repositories/admin_repo.go +++ b/internal/repositories/admin_repo.go @@ -6,7 +6,7 @@ import ( "gorm.io/gorm" - "github.com/treytartt/casera-api/internal/models" + "github.com/treytartt/honeydue-api/internal/models" ) var ( diff --git a/internal/repositories/contractor_repo.go b/internal/repositories/contractor_repo.go index abc61de..b941722 100644 --- a/internal/repositories/contractor_repo.go +++ b/internal/repositories/contractor_repo.go @@ -3,7 +3,7 @@ package repositories import ( "gorm.io/gorm" - "github.com/treytartt/casera-api/internal/models" + "github.com/treytartt/honeydue-api/internal/models" ) // ContractorRepository handles database operations for contractors diff --git a/internal/repositories/contractor_repo_test.go b/internal/repositories/contractor_repo_test.go index 99ce63c..4141e63 100644 --- a/internal/repositories/contractor_repo_test.go +++ b/internal/repositories/contractor_repo_test.go @@ -7,8 +7,8 @@ import ( "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" - "github.com/treytartt/casera-api/internal/models" - "github.com/treytartt/casera-api/internal/testutil" + "github.com/treytartt/honeydue-api/internal/models" + "github.com/treytartt/honeydue-api/internal/testutil" ) func TestToggleFavorite_Active_Toggles(t *testing.T) { diff --git a/internal/repositories/document_repo.go b/internal/repositories/document_repo.go index a935eeb..935f7f0 100644 --- a/internal/repositories/document_repo.go +++ b/internal/repositories/document_repo.go @@ -5,7 +5,7 @@ import ( "gorm.io/gorm" - "github.com/treytartt/casera-api/internal/models" + "github.com/treytartt/honeydue-api/internal/models" ) // DocumentFilter contains optional filter parameters for listing documents. diff --git a/internal/repositories/document_repo_test.go b/internal/repositories/document_repo_test.go index 1a1e34f..e2f469b 100644 --- a/internal/repositories/document_repo_test.go +++ b/internal/repositories/document_repo_test.go @@ -7,8 +7,8 @@ import ( "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" - "github.com/treytartt/casera-api/internal/models" - "github.com/treytartt/casera-api/internal/testutil" + "github.com/treytartt/honeydue-api/internal/models" + "github.com/treytartt/honeydue-api/internal/testutil" ) func TestDocumentRepository_FindByUser_HasDefaultLimit(t *testing.T) { diff --git a/internal/repositories/notification_repo.go b/internal/repositories/notification_repo.go index f4f7b60..dd56956 100644 --- a/internal/repositories/notification_repo.go +++ b/internal/repositories/notification_repo.go @@ -6,7 +6,7 @@ import ( "gorm.io/gorm" - "github.com/treytartt/casera-api/internal/models" + "github.com/treytartt/honeydue-api/internal/models" ) // NotificationRepository handles database operations for notifications diff --git a/internal/repositories/notification_repo_test.go b/internal/repositories/notification_repo_test.go index ba00159..8a47ea0 100644 --- a/internal/repositories/notification_repo_test.go +++ b/internal/repositories/notification_repo_test.go @@ -6,8 +6,8 @@ import ( "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" - "github.com/treytartt/casera-api/internal/models" - "github.com/treytartt/casera-api/internal/testutil" + "github.com/treytartt/honeydue-api/internal/models" + "github.com/treytartt/honeydue-api/internal/testutil" ) func TestGetOrCreatePreferences_New_Creates(t *testing.T) { diff --git a/internal/repositories/reminder_repo.go b/internal/repositories/reminder_repo.go index 225b3f3..908fe90 100644 --- a/internal/repositories/reminder_repo.go +++ b/internal/repositories/reminder_repo.go @@ -5,7 +5,7 @@ import ( "gorm.io/gorm" - "github.com/treytartt/casera-api/internal/models" + "github.com/treytartt/honeydue-api/internal/models" ) // ReminderRepository handles database operations for task reminder logs diff --git a/internal/repositories/residence_repo.go b/internal/repositories/residence_repo.go index 8308f85..ac2ef28 100644 --- a/internal/repositories/residence_repo.go +++ b/internal/repositories/residence_repo.go @@ -9,7 +9,7 @@ import ( "github.com/rs/zerolog/log" "gorm.io/gorm" - "github.com/treytartt/casera-api/internal/models" + "github.com/treytartt/honeydue-api/internal/models" ) // ResidenceRepository handles database operations for residences diff --git a/internal/repositories/residence_repo_test.go b/internal/repositories/residence_repo_test.go index a44e7ba..1c3d721 100644 --- a/internal/repositories/residence_repo_test.go +++ b/internal/repositories/residence_repo_test.go @@ -7,8 +7,8 @@ import ( "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" - "github.com/treytartt/casera-api/internal/models" - "github.com/treytartt/casera-api/internal/testutil" + "github.com/treytartt/honeydue-api/internal/models" + "github.com/treytartt/honeydue-api/internal/testutil" ) func TestResidenceRepository_Create(t *testing.T) { diff --git a/internal/repositories/subscription_repo.go b/internal/repositories/subscription_repo.go index e5345d6..3c2dd05 100644 --- a/internal/repositories/subscription_repo.go +++ b/internal/repositories/subscription_repo.go @@ -7,7 +7,7 @@ import ( "gorm.io/gorm" "gorm.io/gorm/clause" - "github.com/treytartt/casera-api/internal/models" + "github.com/treytartt/honeydue-api/internal/models" ) // SubscriptionRepository handles database operations for subscriptions diff --git a/internal/repositories/subscription_repo_test.go b/internal/repositories/subscription_repo_test.go index ce62003..01622ea 100644 --- a/internal/repositories/subscription_repo_test.go +++ b/internal/repositories/subscription_repo_test.go @@ -8,8 +8,8 @@ import ( "github.com/stretchr/testify/require" "gorm.io/gorm" - "github.com/treytartt/casera-api/internal/models" - "github.com/treytartt/casera-api/internal/testutil" + "github.com/treytartt/honeydue-api/internal/models" + "github.com/treytartt/honeydue-api/internal/testutil" ) func TestGetOrCreate_New_CreatesFreeTier(t *testing.T) { diff --git a/internal/repositories/task_repo.go b/internal/repositories/task_repo.go index fd6b954..784cf58 100644 --- a/internal/repositories/task_repo.go +++ b/internal/repositories/task_repo.go @@ -8,9 +8,9 @@ import ( "github.com/rs/zerolog/log" "gorm.io/gorm" - "github.com/treytartt/casera-api/internal/models" - "github.com/treytartt/casera-api/internal/task" - "github.com/treytartt/casera-api/internal/task/categorization" + "github.com/treytartt/honeydue-api/internal/models" + "github.com/treytartt/honeydue-api/internal/task" + "github.com/treytartt/honeydue-api/internal/task/categorization" ) // ErrVersionConflict indicates a concurrent modification was detected diff --git a/internal/repositories/task_repo_test.go b/internal/repositories/task_repo_test.go index fa9ef7f..1b5a9d8 100644 --- a/internal/repositories/task_repo_test.go +++ b/internal/repositories/task_repo_test.go @@ -7,8 +7,8 @@ import ( "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" - "github.com/treytartt/casera-api/internal/models" - "github.com/treytartt/casera-api/internal/testutil" + "github.com/treytartt/honeydue-api/internal/models" + "github.com/treytartt/honeydue-api/internal/testutil" ) func TestTaskRepository_Create(t *testing.T) { diff --git a/internal/repositories/task_template_repo.go b/internal/repositories/task_template_repo.go index 07f29bb..30480c6 100644 --- a/internal/repositories/task_template_repo.go +++ b/internal/repositories/task_template_repo.go @@ -5,7 +5,7 @@ import ( "gorm.io/gorm" - "github.com/treytartt/casera-api/internal/models" + "github.com/treytartt/honeydue-api/internal/models" ) // TaskTemplateRepository handles database operations for task templates diff --git a/internal/repositories/user_repo.go b/internal/repositories/user_repo.go index be4ec2e..aed993d 100644 --- a/internal/repositories/user_repo.go +++ b/internal/repositories/user_repo.go @@ -7,7 +7,7 @@ import ( "gorm.io/gorm" - "github.com/treytartt/casera-api/internal/models" + "github.com/treytartt/honeydue-api/internal/models" ) var ( diff --git a/internal/repositories/user_repo_test.go b/internal/repositories/user_repo_test.go index fd3f540..a77fe57 100644 --- a/internal/repositories/user_repo_test.go +++ b/internal/repositories/user_repo_test.go @@ -6,8 +6,8 @@ import ( "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" - "github.com/treytartt/casera-api/internal/models" - "github.com/treytartt/casera-api/internal/testutil" + "github.com/treytartt/honeydue-api/internal/models" + "github.com/treytartt/honeydue-api/internal/testutil" ) func TestUserRepository_Create(t *testing.T) { diff --git a/internal/router/router.go b/internal/router/router.go index 8cae61a..98093ac 100644 --- a/internal/router/router.go +++ b/internal/router/router.go @@ -13,19 +13,19 @@ import ( "github.com/rs/zerolog/log" "gorm.io/gorm" - "github.com/treytartt/casera-api/internal/admin" - "github.com/treytartt/casera-api/internal/apperrors" - "github.com/treytartt/casera-api/internal/config" - "github.com/treytartt/casera-api/internal/dto/responses" - "github.com/treytartt/casera-api/internal/handlers" - "github.com/treytartt/casera-api/internal/i18n" - custommiddleware "github.com/treytartt/casera-api/internal/middleware" - "github.com/treytartt/casera-api/internal/monitoring" - "github.com/treytartt/casera-api/internal/push" - "github.com/treytartt/casera-api/internal/repositories" - "github.com/treytartt/casera-api/internal/services" - customvalidator "github.com/treytartt/casera-api/internal/validator" - "github.com/treytartt/casera-api/pkg/utils" + "github.com/treytartt/honeydue-api/internal/admin" + "github.com/treytartt/honeydue-api/internal/apperrors" + "github.com/treytartt/honeydue-api/internal/config" + "github.com/treytartt/honeydue-api/internal/dto/responses" + "github.com/treytartt/honeydue-api/internal/handlers" + "github.com/treytartt/honeydue-api/internal/i18n" + custommiddleware "github.com/treytartt/honeydue-api/internal/middleware" + "github.com/treytartt/honeydue-api/internal/monitoring" + "github.com/treytartt/honeydue-api/internal/push" + "github.com/treytartt/honeydue-api/internal/repositories" + "github.com/treytartt/honeydue-api/internal/services" + customvalidator "github.com/treytartt/honeydue-api/internal/validator" + "github.com/treytartt/honeydue-api/pkg/utils" ) const Version = "2.0.0" @@ -256,8 +256,8 @@ func corsMiddleware(cfg *config.Config) echo.MiddlewareFunc { if len(origins) == 0 { // Restrictive default: only the known production domains origins = []string{ - "https://casera.app", - "https://casera.treytartt.com", + "https://honeyDue.treytartt.com", + "https://honeyDue.treytartt.com", } } } diff --git a/internal/services/apple_auth.go b/internal/services/apple_auth.go index 5679b20..78d3b57 100644 --- a/internal/services/apple_auth.go +++ b/internal/services/apple_auth.go @@ -14,7 +14,7 @@ import ( "github.com/golang-jwt/jwt/v5" - "github.com/treytartt/casera-api/internal/config" + "github.com/treytartt/honeydue-api/internal/config" ) const ( diff --git a/internal/services/auth_service.go b/internal/services/auth_service.go index ec12452..a9952af 100644 --- a/internal/services/auth_service.go +++ b/internal/services/auth_service.go @@ -11,12 +11,12 @@ import ( "golang.org/x/crypto/bcrypt" - "github.com/treytartt/casera-api/internal/apperrors" - "github.com/treytartt/casera-api/internal/config" - "github.com/treytartt/casera-api/internal/dto/requests" - "github.com/treytartt/casera-api/internal/dto/responses" - "github.com/treytartt/casera-api/internal/models" - "github.com/treytartt/casera-api/internal/repositories" + "github.com/treytartt/honeydue-api/internal/apperrors" + "github.com/treytartt/honeydue-api/internal/config" + "github.com/treytartt/honeydue-api/internal/dto/requests" + "github.com/treytartt/honeydue-api/internal/dto/responses" + "github.com/treytartt/honeydue-api/internal/models" + "github.com/treytartt/honeydue-api/internal/repositories" ) // Deprecated: Legacy error constants - kept for reference during transition diff --git a/internal/services/cache_service.go b/internal/services/cache_service.go index cdb66f7..84641b3 100644 --- a/internal/services/cache_service.go +++ b/internal/services/cache_service.go @@ -10,7 +10,7 @@ import ( "github.com/redis/go-redis/v9" "github.com/rs/zerolog/log" - "github.com/treytartt/casera-api/internal/config" + "github.com/treytartt/honeydue-api/internal/config" ) // CacheService provides Redis caching functionality diff --git a/internal/services/contractor_service.go b/internal/services/contractor_service.go index f5654f3..565e40e 100644 --- a/internal/services/contractor_service.go +++ b/internal/services/contractor_service.go @@ -5,11 +5,11 @@ import ( "gorm.io/gorm" - "github.com/treytartt/casera-api/internal/apperrors" - "github.com/treytartt/casera-api/internal/dto/requests" - "github.com/treytartt/casera-api/internal/dto/responses" - "github.com/treytartt/casera-api/internal/models" - "github.com/treytartt/casera-api/internal/repositories" + "github.com/treytartt/honeydue-api/internal/apperrors" + "github.com/treytartt/honeydue-api/internal/dto/requests" + "github.com/treytartt/honeydue-api/internal/dto/responses" + "github.com/treytartt/honeydue-api/internal/models" + "github.com/treytartt/honeydue-api/internal/repositories" ) // Deprecated: Use apperrors.NotFound("error.contractor_not_found") instead diff --git a/internal/services/contractor_service_test.go b/internal/services/contractor_service_test.go index 090ac0e..2ce921c 100644 --- a/internal/services/contractor_service_test.go +++ b/internal/services/contractor_service_test.go @@ -6,9 +6,9 @@ import ( "github.com/stretchr/testify/require" - "github.com/treytartt/casera-api/internal/dto/requests" - "github.com/treytartt/casera-api/internal/repositories" - "github.com/treytartt/casera-api/internal/testutil" + "github.com/treytartt/honeydue-api/internal/dto/requests" + "github.com/treytartt/honeydue-api/internal/repositories" + "github.com/treytartt/honeydue-api/internal/testutil" ) func setupContractorService(t *testing.T) (*ContractorService, *repositories.ContractorRepository, *repositories.ResidenceRepository) { diff --git a/internal/services/document_service.go b/internal/services/document_service.go index bd8b6ad..40d90bf 100644 --- a/internal/services/document_service.go +++ b/internal/services/document_service.go @@ -5,11 +5,11 @@ import ( "gorm.io/gorm" - "github.com/treytartt/casera-api/internal/apperrors" - "github.com/treytartt/casera-api/internal/dto/requests" - "github.com/treytartt/casera-api/internal/dto/responses" - "github.com/treytartt/casera-api/internal/models" - "github.com/treytartt/casera-api/internal/repositories" + "github.com/treytartt/honeydue-api/internal/apperrors" + "github.com/treytartt/honeydue-api/internal/dto/requests" + "github.com/treytartt/honeydue-api/internal/dto/responses" + "github.com/treytartt/honeydue-api/internal/models" + "github.com/treytartt/honeydue-api/internal/repositories" ) // Document-related errors diff --git a/internal/services/email_service.go b/internal/services/email_service.go index 09fb23d..e082744 100644 --- a/internal/services/email_service.go +++ b/internal/services/email_service.go @@ -10,7 +10,7 @@ import ( "github.com/rs/zerolog/log" "gopkg.in/gomail.v2" - "github.com/treytartt/casera-api/internal/config" + "github.com/treytartt/honeydue-api/internal/config" ) // EmailService handles sending emails @@ -140,17 +140,17 @@ func (s *EmailService) SendEmailWithEmbeddedImages(to, subject, htmlBody, textBo } // ────────────────────────────────────────────────────────────────────────────── -// Casera "Warm Sage" Email Design System -// Matching the web landing page: casera.app +// honeyDue "Warm Sage" Email Design System +// Matching the web landing page: honeyDue.treytartt.com // ────────────────────────────────────────────────────────────────────────────── // emailIconURL is the URL for the email icon -const emailIconURL = "https://casera.app/images/icon.png" +const emailIconURL = "https://honeyDue.treytartt.com/images/icon.png" // emailFontStack — Outfit via Google Fonts with progressive fallback const emailFontStack = "Outfit, -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Helvetica, Arial, sans-serif" -// baseEmailTemplate wraps all email content in the Casera shell: +// baseEmailTemplate wraps all email content in the honeyDue shell: // cream background → white card with warm shadow → sage brand stripe at top func baseEmailTemplate() string { return ` @@ -238,10 +238,10 @@ func emailHeader(subtitle string) string {
- Casera + honeyDue -

Casera

+

honeyDue

@@ -276,8 +276,8 @@ func emailFooter(year int) string {
-

© %d Casera. All rights reserved.

-

support@casera.app

+

© %d honeyDue. All rights reserved.

+

honeydue@treymail.com

`, emailDivider(), emailFontStack, year, emailFontStack) @@ -395,7 +395,7 @@ func emailTipCard(number, title, description, accentColor, bgColor, titleColor s // SendWelcomeEmail sends a welcome email with verification code func (s *EmailService) SendWelcomeEmail(to, firstName, code string) error { - subject := "Welcome to Casera - Verify Your Email" + subject := "Welcome to honeyDue - Verify Your Email" name := firstName if name == "" { @@ -413,7 +413,7 @@ func (s *EmailService) SendWelcomeEmail(to, firstName, code string) error { %s -

If you didn't create a Casera account, you can safely ignore this email.

+

If you didn't create a honeyDue account, you can safely ignore this email.

@@ -427,7 +427,7 @@ func (s *EmailService) SendWelcomeEmail(to, firstName, code string) error { htmlBody := fmt.Sprintf(baseEmailTemplate(), subject, bodyContent) - textBody := fmt.Sprintf(`Welcome to Casera! + textBody := fmt.Sprintf(`Welcome to honeyDue! Hi %s, @@ -437,9 +437,9 @@ Your verification code: %s This code expires in 24 hours. -If you didn't create a Casera account, you can safely ignore this email. +If you didn't create a honeyDue account, you can safely ignore this email. -- The Casera Team +- The honeyDue Team `, name, code) return s.SendEmail(to, subject, htmlBody, textBody) @@ -447,7 +447,7 @@ If you didn't create a Casera account, you can safely ignore this email. // SendAppleWelcomeEmail sends a welcome email for Apple Sign In users (no verification needed) func (s *EmailService) SendAppleWelcomeEmail(to, firstName string) error { - subject := "Welcome to Casera!" + subject := "Welcome to honeyDue!" name := firstName if name == "" { @@ -471,21 +471,21 @@ func (s *EmailService) SendAppleWelcomeEmail(to, firstName string) error { %s -

Questions? Reach out anytime at support@casera.app

+

Questions? Reach out anytime at honeydue@treymail.com

%s`, - emailHeader("Welcome to Casera!"), + emailHeader("Welcome to honeyDue!"), emailFontStack, name, emailCalloutBox(features), - emailButton("Open Casera", "casera://home", "#C4856A"), + emailButton("Open honeyDue", "honeydue://home", "#C4856A"), emailFontStack, emailFooter(time.Now().Year())) htmlBody := fmt.Sprintf(baseEmailTemplate(), subject, bodyContent) - textBody := fmt.Sprintf(`Welcome to Casera! + textBody := fmt.Sprintf(`Welcome to honeyDue! Hi %s, @@ -496,9 +496,9 @@ Your account is ready! Here's what you can do: - Contractor Directory: Keep your trusted pros organized - Document Storage: Store warranties, manuals, and important records -Questions? Reach out anytime at support@casera.app +Questions? Reach out anytime at honeydue@treymail.com -- The Casera Team +- The honeyDue Team `, name) return s.SendEmail(to, subject, htmlBody, textBody) @@ -506,7 +506,7 @@ Questions? Reach out anytime at support@casera.app // SendGoogleWelcomeEmail sends a welcome email for Google Sign In users (no verification needed) func (s *EmailService) SendGoogleWelcomeEmail(to, firstName string) error { - subject := "Welcome to Casera!" + subject := "Welcome to honeyDue!" name := firstName if name == "" { @@ -530,21 +530,21 @@ func (s *EmailService) SendGoogleWelcomeEmail(to, firstName string) error { %s -

Questions? Reach out anytime at support@casera.app

+

Questions? Reach out anytime at honeydue@treymail.com

%s`, - emailHeader("Welcome to Casera!"), + emailHeader("Welcome to honeyDue!"), emailFontStack, name, emailCalloutBox(features), - emailButton("Open Casera", "casera://home", "#C4856A"), + emailButton("Open honeyDue", "honeydue://home", "#C4856A"), emailFontStack, emailFooter(time.Now().Year())) htmlBody := fmt.Sprintf(baseEmailTemplate(), subject, bodyContent) - textBody := fmt.Sprintf(`Welcome to Casera! + textBody := fmt.Sprintf(`Welcome to honeyDue! Hi %s, @@ -555,9 +555,9 @@ Your account is ready! Here's what you can do: - Contractor Directory: Keep your trusted pros organized - Document Storage: Store warranties, manuals, and important records -Questions? Reach out anytime at support@casera.app +Questions? Reach out anytime at honeydue@treymail.com -- The Casera Team +- The honeyDue Team `, name) return s.SendEmail(to, subject, htmlBody, textBody) @@ -565,7 +565,7 @@ Questions? Reach out anytime at support@casera.app // SendPostVerificationEmail sends a welcome email after user verifies their email address func (s *EmailService) SendPostVerificationEmail(to, firstName string) error { - subject := "You're All Set! Getting Started with Casera" + subject := "You're All Set! Getting Started with honeyDue" name := firstName if name == "" { @@ -584,13 +584,13 @@ func (s *EmailService) SendPostVerificationEmail(to, firstName string) error {
@@ -598,7 +598,7 @@ func (s *EmailService) SendPostVerificationEmail(to, firstName string) error { emailHeader("You're all set!"), emailFontStack, name, tips, - emailButton("Get Started", "casera://home", "#C4856A"), + emailButton("Get Started", "honeydue://home", "#C4856A"), emailFontStack, emailFooter(time.Now().Year())) @@ -608,7 +608,7 @@ func (s *EmailService) SendPostVerificationEmail(to, firstName string) error { Hi %s, -Your email is verified and you're ready to go! Here's how to get the most out of Casera: +Your email is verified and you're ready to go! Here's how to get the most out of honeyDue: 1. ADD YOUR PROPERTY Start by adding your home. You can manage multiple properties and share access with family. @@ -625,9 +625,9 @@ Upload warranties, manuals, insurance policies. Find them instantly instead of d 5. SAVE YOUR CONTRACTORS Keep your trusted plumber, electrician, and other pros organized and one tap away. -Questions? support@casera.app +Questions? honeydue@treymail.com -- The Casera Team +- The honeyDue Team `, name) return s.SendEmail(to, subject, htmlBody, textBody) @@ -635,7 +635,7 @@ Questions? support@casera.app // SendVerificationEmail sends an email verification code func (s *EmailService) SendVerificationEmail(to, firstName, code string) error { - subject := "Casera - Verify Your Email" + subject := "honeyDue - Verify Your Email" name := firstName if name == "" { @@ -677,7 +677,7 @@ This code expires in 24 hours. If you didn't request this, you can safely ignore this email. -- The Casera Team +- The honeyDue Team `, name, code) return s.SendEmail(to, subject, htmlBody, textBody) @@ -685,7 +685,7 @@ If you didn't request this, you can safely ignore this email. // SendPasswordResetEmail sends a password reset email func (s *EmailService) SendPasswordResetEmail(to, firstName, code string) error { - subject := "Casera - Password Reset Request" + subject := "honeyDue - Password Reset Request" name := firstName if name == "" { @@ -727,7 +727,7 @@ This code expires in 15 minutes. If you didn't request a password reset, please ignore this email. Your password will remain unchanged. -- The Casera Team +- The honeyDue Team `, name, code) return s.SendEmail(to, subject, htmlBody, textBody) @@ -735,7 +735,7 @@ If you didn't request a password reset, please ignore this email. Your password // SendPasswordChangedEmail sends a password changed confirmation email func (s *EmailService) SendPasswordChangedEmail(to, firstName string) error { - subject := "Casera - Your Password Has Been Changed" + subject := "honeyDue - Your Password Has Been Changed" name := firstName if name == "" { @@ -761,7 +761,7 @@ func (s *EmailService) SendPasswordChangedEmail(to, firstName string) error { emailHeader("Password changed"), emailFontStack, name, emailFontStack, changeTime, - emailAlertBox("Wasn't you?", "If you didn't make this change, contact us immediately at support@casera.app or reset your password right away.", "#C4856A", "#FDF3EE", "#A06B52"), + emailAlertBox("Wasn't you?", "If you didn't make this change, contact us immediately at honeydue@treymail.com or reset your password right away.", "#C4856A", "#FDF3EE", "#A06B52"), emailFooter(time.Now().Year())) htmlBody := fmt.Sprintf(baseEmailTemplate(), subject, bodyContent) @@ -772,9 +772,9 @@ Hi %s, Your password was successfully changed on %s. -If you didn't make this change, contact us immediately at support@casera.app or reset your password right away. +If you didn't make this change, contact us immediately at honeydue@treymail.com or reset your password right away. -- The Casera Team +- The honeyDue Team `, name, changeTime) return s.SendEmail(to, subject, htmlBody, textBody) @@ -783,7 +783,7 @@ If you didn't make this change, contact us immediately at support@casera.app or // SendTaskCompletedEmail sends an email notification when a task is completed // images parameter is optional - pass nil or empty slice if no images func (s *EmailService) SendTaskCompletedEmail(to, recipientName, taskTitle, completedByName, residenceName string, images []EmbeddedImage) error { - subject := fmt.Sprintf("Casera - Task Completed: %s", taskTitle) + subject := fmt.Sprintf("honeyDue - Task Completed: %s", taskTitle) name := recipientName if name == "" { @@ -872,7 +872,7 @@ Task: %s Completed by: %s Completed on: %s%s -- The Casera Team +- The honeyDue Team `, name, residenceName, taskTitle, completedByName, completedTime, imagesText) // Use embedded images method if we have images, otherwise use simple send @@ -884,7 +884,7 @@ Completed on: %s%s // SendTasksReportEmail sends a tasks report email with PDF attachment func (s *EmailService) SendTasksReportEmail(to, recipientName, residenceName string, totalTasks, completed, pending, overdue int, pdfData []byte) error { - subject := fmt.Sprintf("Casera - Tasks Report for %s", residenceName) + subject := fmt.Sprintf("honeyDue - Tasks Report for %s", residenceName) name := recipientName if name == "" { @@ -942,7 +942,7 @@ func (s *EmailService) SendTasksReportEmail(to, recipientName, residenceName str emailHeader("Tasks report"), emailFontStack, name, residenceName, emailCalloutBox(statRow), - emailButton("Open Casera", "casera://tasks", "#6B8F71"), + emailButton("Open honeyDue", "honeydue://tasks", "#6B8F71"), emailFontStack, emailFooter(time.Now().Year())) @@ -958,7 +958,7 @@ Total: %d | Completed: %d | Pending: %d | Overdue: %d The full report is attached as a PDF. -- The Casera Team +- The honeyDue Team `, residenceName, name, residenceName, totalTasks, completed, pending, overdue) // Create filename with timestamp @@ -978,7 +978,7 @@ The full report is attached as a PDF. // SendNoResidenceOnboardingEmail sends an onboarding email to users who haven't created a residence func (s *EmailService) SendNoResidenceOnboardingEmail(to, firstName, baseURL, trackingID string) error { - subject := "Get started with Casera - Add your first property" + subject := "Get started with honeyDue - Add your first property" name := firstName if name == "" { @@ -998,7 +998,7 @@ func (s *EmailService) SendNoResidenceOnboardingEmail(to, firstName, baseURL, tr