feat: add site settings management with identity and social links

- Add site_identity and social_links database tables
- Implement GET/PUT /api/settings endpoints (GET public, PUT authenticated)
- Replace hardcoded homepage content with database-driven settings
- Add admin settings UI with identity and social links editing
This commit is contained in:
2026-01-06 22:48:10 -06:00
parent 9ab22ea234
commit 4663b00942
13 changed files with 770 additions and 207 deletions
+7 -41
View File
@@ -134,51 +134,17 @@ export async function getAdminStats(): Promise<AdminStats> {
return clientApiFetch<AdminStats>("/api/stats");
}
// Settings API (currently mocked - no backend implementation yet)
// Settings API
export async function getSettings(): Promise<SiteSettings> {
// TODO: Implement when settings system is added
// For now, return default settings
return {
identity: {
displayName: "Ryan Walters",
occupation: "Full-Stack Software Engineer",
bio: "A fanatical software engineer with expertise and passion for sound, scalable and high-performance applications. I'm always working on something new.\nSometimes innovative — sometimes crazy.",
siteTitle: "Xevion.dev",
},
socialLinks: [
{
id: "social-1",
platform: "github",
label: "GitHub",
value: "https://github.com/Xevion",
visible: true,
},
{
id: "social-2",
platform: "linkedin",
label: "LinkedIn",
value: "https://linkedin.com/in/ryancwalters",
visible: true,
},
{
id: "social-3",
platform: "discord",
label: "Discord",
value: "xevion",
visible: true,
},
],
adminPreferences: {
sessionTimeoutMinutes: 60,
eventsRetentionDays: 30,
dashboardDefaultTab: "overview",
},
};
return clientApiFetch<SiteSettings>("/api/settings");
}
export async function updateSettings(
settings: SiteSettings,
): Promise<SiteSettings> {
// TODO: Implement when settings system is added
return settings;
return clientApiFetch<SiteSettings>("/api/settings", {
method: "PUT",
headers: { "Content-Type": "application/json" },
body: JSON.stringify(settings),
});
}