Remove hardcoded /ask/ routes (core/urls.py), /api/ask/ (api_urls.py),
ask_views.py, and ask.html input page. Ask is now a normal Link record
(alias='ask', link_type=ACTION) created by data migration 0053, so it
behaves exactly like other action links: go/ask/问题 → catch-all →
execute_action → 302 to Discord, editable/deletable in the Links UI.
Tests updated: ask covered as ACTION link (redirect/dedup/empty-query).
- Portfolio management (MOMO, IBKR personal, IBKR Yanhua)
- Stock holdings with transaction history (buy/sell)
- Weekly AI report generation
- Real-time price cache via Finnhub API
- Dashboard with tree view and performance charts
- REST API with AI-friendly batch update endpoint
- Management command for scheduled report generation
For大哥's personal investment advisor system.
- Move routes to top of urlpatterns (before catch-all alias resolver)
- Serve directly from committed static/ dir instead of staticfiles/ (STATIC_ROOT)
so they work without collectstatic being run
- Eliminates APPEND_SLASH redirect to alias catch-all when file not in staticfiles/
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
- Add operationId to all 20 API operations
- Add tag groups (Pages, Posts, Collections, Images, Files) with descriptions
- Enrich info.description with concept table, usage patterns, and examples
- Add /llms.txt (llmstxt.org standard) with plain-text API overview
- Add /.well-known/ai-plugin.json (OpenAI plugin manifest)
- Add URL routes for llms.txt and ai-plugin.json
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>