classDiagram direction LR class Card { +int ID +string Icon +string Title +string Subtitle +string URL +int Sort +bool Enabled +time Time CreatedAt } class Setting { +string Key +string Value } class Admin { +int ID +string Username +string Password } class SessionData { +int AdminID +string Username +time Time CreatedAt } class SessionStore { -map~string-SessionData~ store -sync.RWMutex mu +Create(adminID int, username string) string +Get(sessionID string) *SessionData +Delete(sessionID string) } class CardModel { +GetAllCards() []Card +GetEnabledCards() []Card +GetCardByID(id int) *Card +CreateCard(card *Card) error +UpdateCard(card *Card) error +DeleteCard(id int) error +ToggleCard(id int) error +MoveCardUp(id int) error +MoveCardDown(id int) error } class SettingModel { +GetSetting(key string) string +SetSetting(key string, value string) error +GetSearchEngines() map~string-string +SetSearchEngine(name string, url string) error } class AdminModel { +GetAdminByUsername(username string) *Admin +CreateAdmin(username string, password string) error +VerifyPassword(username string, password string) bool +ChangePassword(adminID int, newPassword string) error } class HandlerHome { +HomeHandler(c *gin.Context) } class HandlerAdmin { +LoginGet(c *gin.Context) +LoginPost(c *gin.Context) +Logout(c *gin.Context) +AdminIndex(c *gin.Context) } class HandlerCards { +CardsList(c *gin.Context) +CardCreateGet(c *gin.Context) +CardCreatePost(c *gin.Context) +CardEditGet(c *gin.Context) +CardEditPost(c *gin.Context) +CardDelete(c *gin.Context) +CardToggle(c *gin.Context) +CardMoveUp(c *gin.Context) +CardMoveDown(c *gin.Context) } class HandlerSettings { +SettingsGet(c *gin.Context) +SettingsPost(c *gin.Context) } class AuthMiddleware { +AuthRequired() gin.HandlerFunc } CardModel --> Card : returns SettingModel --> Setting : returns AdminModel --> Admin : returns SessionStore --> SessionData : stores HandlerHome --> CardModel : uses HandlerHome --> SettingModel : uses HandlerAdmin --> AdminModel : uses HandlerAdmin --> SessionStore : uses HandlerCards --> CardModel : uses HandlerSettings --> SettingModel : uses AuthMiddleware --> SessionStore : uses