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:
24
api/src/features/registry.js
Normal file
24
api/src/features/registry.js
Normal 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 };
|
||||
Reference in New Issue
Block a user