Add secret management guide, client-side performance monitoring, and search accessibility enhancements

- Introduced a comprehensive Secret Management Guide detailing best practices, secret classification, development setup, production management, rotation procedures, and emergency protocols.
- Implemented a client-side performance monitoring script to track various metrics including page load performance, paint metrics, layout shifts, and memory usage.
- Enhanced search accessibility with keyboard navigation support for search results, ensuring compliance with WCAG standards and improving user experience.
This commit is contained in:
pacnpal
2025-12-23 16:41:42 -05:00
parent ae31e889d7
commit edcd8f2076
155 changed files with 22046 additions and 4645 deletions

View File

@@ -24,9 +24,9 @@ class Park(StateMachineMixin, TrackedModel):
objects = ParkManager()
id: int # Type hint for Django's automatic id field
name = models.CharField(max_length=255)
slug = models.SlugField(max_length=255, unique=True)
description = models.TextField(blank=True)
name = models.CharField(max_length=255, help_text="Park name")
slug = models.SlugField(max_length=255, unique=True, help_text="URL-friendly identifier")
description = models.TextField(blank=True, help_text="Park description")
state_field_name = "status"
status = RichFSMField(
@@ -50,20 +50,20 @@ class Park(StateMachineMixin, TrackedModel):
# ParkLocation
# Details
opening_date = models.DateField(null=True, blank=True)
closing_date = models.DateField(null=True, blank=True)
operating_season = models.CharField(max_length=255, blank=True)
opening_date = models.DateField(null=True, blank=True, help_text="Opening date")
closing_date = models.DateField(null=True, blank=True, help_text="Closing date")
operating_season = models.CharField(max_length=255, blank=True, help_text="Operating season")
size_acres = models.DecimalField(
max_digits=10, decimal_places=2, null=True, blank=True
max_digits=10, decimal_places=2, null=True, blank=True, help_text="Park size in acres"
)
website = models.URLField(blank=True)
website = models.URLField(blank=True, help_text="Official website URL")
# Statistics
average_rating = models.DecimalField(
max_digits=3, decimal_places=2, null=True, blank=True
max_digits=3, decimal_places=2, null=True, blank=True, help_text="Average user rating (110)"
)
ride_count = models.IntegerField(null=True, blank=True)
coaster_count = models.IntegerField(null=True, blank=True)
ride_count = models.IntegerField(null=True, blank=True, help_text="Total ride count")
coaster_count = models.IntegerField(null=True, blank=True, help_text="Total coaster count")
# Image settings - references to existing photos
banner_image = models.ForeignKey(
@@ -133,6 +133,8 @@ class Park(StateMachineMixin, TrackedModel):
)
class Meta:
verbose_name = "Park"
verbose_name_plural = "Parks"
ordering = ["name"]
constraints = [
# Business rule: Closing date must be after opening date