Rebrand from MyCrib to Casera

- Update Go module from mycrib-api to casera-api
- Update all import statements across 69 Go files
- Update admin panel branding (title, sidebar, login form)
- Update email templates (subjects, bodies, signatures)
- Update PDF report generation branding
- Update Docker container names and network
- Update config defaults (database name, email sender, APNS topic)
- Update README and documentation

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
Trey t
2025-11-28 21:10:48 -06:00
parent 99465a590d
commit c7dc56e2d2
84 changed files with 287 additions and 287 deletions

View File

@@ -9,11 +9,11 @@ import (
"golang.org/x/crypto/bcrypt"
"github.com/treytartt/mycrib-api/internal/config"
"github.com/treytartt/mycrib-api/internal/dto/requests"
"github.com/treytartt/mycrib-api/internal/dto/responses"
"github.com/treytartt/mycrib-api/internal/models"
"github.com/treytartt/mycrib-api/internal/repositories"
"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"
)
var (

View File

@@ -9,7 +9,7 @@ import (
"github.com/redis/go-redis/v9"
"github.com/rs/zerolog/log"
"github.com/treytartt/mycrib-api/internal/config"
"github.com/treytartt/casera-api/internal/config"
)
// CacheService provides Redis caching functionality

View File

@@ -5,10 +5,10 @@ import (
"gorm.io/gorm"
"github.com/treytartt/mycrib-api/internal/dto/requests"
"github.com/treytartt/mycrib-api/internal/dto/responses"
"github.com/treytartt/mycrib-api/internal/models"
"github.com/treytartt/mycrib-api/internal/repositories"
"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"
)
// Contractor-related errors

View File

@@ -5,10 +5,10 @@ import (
"gorm.io/gorm"
"github.com/treytartt/mycrib-api/internal/dto/requests"
"github.com/treytartt/mycrib-api/internal/dto/responses"
"github.com/treytartt/mycrib-api/internal/models"
"github.com/treytartt/mycrib-api/internal/repositories"
"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"
)
// Document-related errors

View File

@@ -10,7 +10,7 @@ import (
"github.com/rs/zerolog/log"
"gopkg.in/gomail.v2"
"github.com/treytartt/mycrib-api/internal/config"
"github.com/treytartt/casera-api/internal/config"
)
// EmailService handles sending emails
@@ -86,7 +86,7 @@ func (s *EmailService) SendEmailWithAttachment(to, subject, htmlBody, textBody s
// SendWelcomeEmail sends a welcome email with verification code
func (s *EmailService) SendWelcomeEmail(to, firstName, code string) error {
subject := "Welcome to MyCrib - Verify Your Email"
subject := "Welcome to Casera - Verify Your Email"
name := firstName
if name == "" {
@@ -109,16 +109,16 @@ func (s *EmailService) SendWelcomeEmail(to, firstName, code string) error {
<body>
<div class="container">
<div class="header">
<h1>Welcome to MyCrib!</h1>
<h1>Welcome to Casera!</h1>
</div>
<p>Hi %s,</p>
<p>Thank you for creating a MyCrib account. To complete your registration, please verify your email address by entering the following code:</p>
<p>Thank you for creating a Casera account. To complete your registration, please verify your email address by entering the following code:</p>
<div class="code">%s</div>
<p>This code will expire in 24 hours.</p>
<p>If you didn't create a MyCrib account, you can safely ignore this email.</p>
<p>Best regards,<br>The MyCrib Team</p>
<p>If you didn't create a Casera account, you can safely ignore this email.</p>
<p>Best regards,<br>The Casera Team</p>
<div class="footer">
<p>&copy; %d MyCrib. All rights reserved.</p>
<p>&copy; %d Casera. All rights reserved.</p>
</div>
</div>
</body>
@@ -126,20 +126,20 @@ func (s *EmailService) SendWelcomeEmail(to, firstName, code string) error {
`, name, code, time.Now().Year())
textBody := fmt.Sprintf(`
Welcome to MyCrib!
Welcome to Casera!
Hi %s,
Thank you for creating a MyCrib account. To complete your registration, please verify your email address by entering the following code:
Thank you for creating a Casera account. To complete your registration, please verify your email address by entering the following code:
%s
This code will expire in 24 hours.
If you didn't create a MyCrib account, you can safely ignore this email.
If you didn't create a Casera account, you can safely ignore this email.
Best regards,
The MyCrib Team
The Casera Team
`, name, code)
return s.SendEmail(to, subject, htmlBody, textBody)
@@ -147,7 +147,7 @@ The MyCrib Team
// SendVerificationEmail sends an email verification code
func (s *EmailService) SendVerificationEmail(to, firstName, code string) error {
subject := "MyCrib - Verify Your Email"
subject := "Casera - Verify Your Email"
name := firstName
if name == "" {
@@ -174,9 +174,9 @@ func (s *EmailService) SendVerificationEmail(to, firstName, code string) error {
<div class="code">%s</div>
<p>This code will expire in 24 hours.</p>
<p>If you didn't request this, you can safely ignore this email.</p>
<p>Best regards,<br>The MyCrib Team</p>
<p>Best regards,<br>The Casera Team</p>
<div class="footer">
<p>&copy; %d MyCrib. All rights reserved.</p>
<p>&copy; %d Casera. All rights reserved.</p>
</div>
</div>
</body>
@@ -197,7 +197,7 @@ This code will expire in 24 hours.
If you didn't request this, you can safely ignore this email.
Best regards,
The MyCrib Team
The Casera Team
`, name, code)
return s.SendEmail(to, subject, htmlBody, textBody)
@@ -205,7 +205,7 @@ The MyCrib Team
// SendPasswordResetEmail sends a password reset email
func (s *EmailService) SendPasswordResetEmail(to, firstName, code string) error {
subject := "MyCrib - Password Reset Request"
subject := "Casera - Password Reset Request"
name := firstName
if name == "" {
@@ -235,9 +235,9 @@ func (s *EmailService) SendPasswordResetEmail(to, firstName, code string) error
<div class="warning">
<strong>Security Notice:</strong> If you didn't request a password reset, please ignore this email. Your password will remain unchanged.
</div>
<p>Best regards,<br>The MyCrib Team</p>
<p>Best regards,<br>The Casera Team</p>
<div class="footer">
<p>&copy; %d MyCrib. All rights reserved.</p>
<p>&copy; %d Casera. All rights reserved.</p>
</div>
</div>
</body>
@@ -258,7 +258,7 @@ This code will expire in 15 minutes.
SECURITY NOTICE: If you didn't request a password reset, please ignore this email. Your password will remain unchanged.
Best regards,
The MyCrib Team
The Casera Team
`, name, code)
return s.SendEmail(to, subject, htmlBody, textBody)
@@ -266,7 +266,7 @@ The MyCrib Team
// SendPasswordChangedEmail sends a password changed confirmation email
func (s *EmailService) SendPasswordChangedEmail(to, firstName string) error {
subject := "MyCrib - Your Password Has Been Changed"
subject := "Casera - Your Password Has Been Changed"
name := firstName
if name == "" {
@@ -289,13 +289,13 @@ func (s *EmailService) SendPasswordChangedEmail(to, firstName string) error {
<div class="container">
<h1>Password Changed</h1>
<p>Hi %s,</p>
<p>Your MyCrib password was successfully changed on %s.</p>
<p>Your Casera password was successfully changed on %s.</p>
<div class="warning">
<strong>Didn't make this change?</strong> If you didn't change your password, please contact us immediately at support@mycrib.com or reset your password.
<strong>Didn't make this change?</strong> If you didn't change your password, please contact us immediately at support@casera.app or reset your password.
</div>
<p>Best regards,<br>The MyCrib Team</p>
<p>Best regards,<br>The Casera Team</p>
<div class="footer">
<p>&copy; %d MyCrib. All rights reserved.</p>
<p>&copy; %d Casera. All rights reserved.</p>
</div>
</div>
</body>
@@ -307,12 +307,12 @@ Password Changed
Hi %s,
Your MyCrib password was successfully changed on %s.
Your Casera password was successfully changed on %s.
DIDN'T MAKE THIS CHANGE? If you didn't change your password, please contact us immediately at support@mycrib.com or reset your password.
DIDN'T MAKE THIS CHANGE? If you didn't change your password, please contact us immediately at support@casera.app or reset your password.
Best regards,
The MyCrib Team
The Casera Team
`, name, time.Now().UTC().Format("January 2, 2006 at 3:04 PM UTC"))
return s.SendEmail(to, subject, htmlBody, textBody)
@@ -320,7 +320,7 @@ The MyCrib Team
// SendTaskCompletedEmail sends an email notification when a task is completed
func (s *EmailService) SendTaskCompletedEmail(to, recipientName, taskTitle, completedByName, residenceName string) error {
subject := fmt.Sprintf("MyCrib - Task Completed: %s", taskTitle)
subject := fmt.Sprintf("Casera - Task Completed: %s", taskTitle)
name := recipientName
if name == "" {
@@ -353,9 +353,9 @@ func (s *EmailService) SendTaskCompletedEmail(to, recipientName, taskTitle, comp
<p class="task-title">%s</p>
<p class="task-meta">Completed by: %s<br>Completed on: %s</p>
</div>
<p>Best regards,<br>The MyCrib Team</p>
<p>Best regards,<br>The Casera Team</p>
<div class="footer">
<p>&copy; %d MyCrib. All rights reserved.</p>
<p>&copy; %d Casera. All rights reserved.</p>
</div>
</div>
</body>
@@ -374,7 +374,7 @@ Completed by: %s
Completed on: %s
Best regards,
The MyCrib Team
The Casera Team
`, name, residenceName, taskTitle, completedByName, time.Now().UTC().Format("January 2, 2006 at 3:04 PM"))
return s.SendEmail(to, subject, htmlBody, textBody)
@@ -382,7 +382,7 @@ The MyCrib Team
// 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("MyCrib - Tasks Report for %s", residenceName)
subject := fmt.Sprintf("Casera - Tasks Report for %s", residenceName)
name := recipientName
if name == "" {
@@ -441,9 +441,9 @@ func (s *EmailService) SendTasksReportEmail(to, recipientName, residenceName str
</table>
</div>
<p>Open the attached PDF for the complete list of tasks with details.</p>
<p>Best regards,<br>The MyCrib Team</p>
<p>Best regards,<br>The Casera Team</p>
<div class="footer">
<p>&copy; %d MyCrib. All rights reserved.</p>
<p>&copy; %d Casera. All rights reserved.</p>
</div>
</div>
</body>
@@ -466,7 +466,7 @@ Summary:
Open the attached PDF for the complete list of tasks with details.
Best regards,
The MyCrib Team
The Casera Team
`, residenceName, name, residenceName, totalTasks, completed, pending, overdue)
// Create filename with timestamp

View File

@@ -7,9 +7,9 @@ import (
"gorm.io/gorm"
"github.com/treytartt/mycrib-api/internal/models"
"github.com/treytartt/mycrib-api/internal/push"
"github.com/treytartt/mycrib-api/internal/repositories"
"github.com/treytartt/casera-api/internal/models"
"github.com/treytartt/casera-api/internal/push"
"github.com/treytartt/casera-api/internal/repositories"
)
// Notification-related errors

View File

@@ -164,7 +164,7 @@ func (s *PDFService) GenerateTasksReportPDF(report *TasksReportResponse) ([]byte
pdf.SetY(-25)
pdf.SetFont("Arial", "I", 9)
pdf.SetTextColor(128, 128, 128)
pdf.Cell(0, 10, fmt.Sprintf("MyCrib - Tasks Report for %s", report.ResidenceName))
pdf.Cell(0, 10, fmt.Sprintf("Casera - Tasks Report for %s", report.ResidenceName))
pdf.Ln(5)
pdf.Cell(0, 10, fmt.Sprintf("Generated on %s", time.Now().UTC().Format("2006-01-02 15:04:05 UTC")))

View File

@@ -6,11 +6,11 @@ import (
"gorm.io/gorm"
"github.com/treytartt/mycrib-api/internal/config"
"github.com/treytartt/mycrib-api/internal/dto/requests"
"github.com/treytartt/mycrib-api/internal/dto/responses"
"github.com/treytartt/mycrib-api/internal/models"
"github.com/treytartt/mycrib-api/internal/repositories"
"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"
)
// Common errors

View File

@@ -7,10 +7,10 @@ import (
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
"github.com/treytartt/mycrib-api/internal/config"
"github.com/treytartt/mycrib-api/internal/dto/requests"
"github.com/treytartt/mycrib-api/internal/repositories"
"github.com/treytartt/mycrib-api/internal/testutil"
"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/testutil"
)
func setupResidenceService(t *testing.T) (*ResidenceService, *repositories.ResidenceRepository, *repositories.UserRepository) {

View File

@@ -12,7 +12,7 @@ import (
"github.com/google/uuid"
"github.com/rs/zerolog/log"
"github.com/treytartt/mycrib-api/internal/config"
"github.com/treytartt/casera-api/internal/config"
)
// StorageService handles file uploads to local filesystem

View File

@@ -6,8 +6,8 @@ import (
"gorm.io/gorm"
"github.com/treytartt/mycrib-api/internal/models"
"github.com/treytartt/mycrib-api/internal/repositories"
"github.com/treytartt/casera-api/internal/models"
"github.com/treytartt/casera-api/internal/repositories"
)
// Subscription-related errors

View File

@@ -9,10 +9,10 @@ import (
"github.com/rs/zerolog/log"
"gorm.io/gorm"
"github.com/treytartt/mycrib-api/internal/dto/requests"
"github.com/treytartt/mycrib-api/internal/dto/responses"
"github.com/treytartt/mycrib-api/internal/models"
"github.com/treytartt/mycrib-api/internal/repositories"
"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"
)
// Task-related errors

View File

@@ -8,10 +8,10 @@ import (
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
"github.com/treytartt/mycrib-api/internal/dto/requests"
"github.com/treytartt/mycrib-api/internal/models"
"github.com/treytartt/mycrib-api/internal/repositories"
"github.com/treytartt/mycrib-api/internal/testutil"
"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/testutil"
)
func setupTaskService(t *testing.T) (*TaskService, *repositories.TaskRepository, *repositories.ResidenceRepository) {

View File

@@ -3,8 +3,8 @@ package services
import (
"errors"
"github.com/treytartt/mycrib-api/internal/dto/responses"
"github.com/treytartt/mycrib-api/internal/repositories"
"github.com/treytartt/casera-api/internal/dto/responses"
"github.com/treytartt/casera-api/internal/repositories"
)
var (