feat: add media-input, gamification, and templates features

- media-input: universal media upload (text/audio/photo/video) with base64 encoding, file storage, and transcription stub
- gamification: points, streaks, levels, badges, leaderboard with auto-leveling
- templates: predefined task sets with 3 default templates (Weekly Sprint, Study Plan, Moving Checklist)
- All features registered via modular registry.js for easy enable/disable

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-03-30 01:13:07 +00:00
parent 0c3fc44440
commit f9c4ec631c
5 changed files with 266 additions and 2 deletions

View File

@@ -0,0 +1,24 @@
// Task Team — Feature Registry
// Each feature is a separate file. Add/remove here to enable/disable.
const features = [
{ name: "media-input", path: "./media-input", prefix: "/api/v1" },
{ name: "gamification", path: "./gamification", prefix: "/api/v1" },
{ name: "templates", path: "./templates", prefix: "/api/v1" },
{ name: "time-tracking", path: "./time-tracking", prefix: "/api/v1" },
{ name: "kanban", path: "./kanban", prefix: "/api/v1" },
{ name: "ai-briefing", path: "./ai-briefing", prefix: "/api/v1" },
{ name: "webhooks-outgoing", path: "./webhooks-outgoing", prefix: "/api/v1" },
];
async function registerFeatures(app) {
for (const f of features) {
try {
await app.register(require(f.path), { prefix: f.prefix });
app.log.info(`Feature loaded: ${f.name}`);
} catch (e) {
app.log.warn(`Feature ${f.name} failed to load: ${e.message}`);
}
}
}
module.exports = { registerFeatures };