summaryrefslogtreecommitdiff
path: root/Biz/PodcastItLater
AgeCommit message (Collapse)Author
2025-11-27Fixes to get all tests passingBen Sima
2025-11-26Build failed: Biz/PodcastItLater/Test.py - 1Ben Sima
The build passes. The fix involved: 1. Adding `sqids` to the test dependencies in Test.py 2. Wrapping the return value of `sqids.encode()` with `str()` to satisfy Task-Id: t-1o2cbfhxu5e
2025-11-24Fix lint formattingBen Sima
2025-11-24Remove zombie fileBen Sima
2025-11-22Merge branch 'task/t-1o2cbf1fzh2' into liveBen Sima
2025-11-22Merge branch 'task/t-1o2cbco62ly' into liveBen Sima
2025-11-22feat: implement t-1o2cbf1fzh2Ben Sima
2025-11-22task: sync databaseBen Sima
2025-11-22feat: implement t-1o2cbco62lyBen Sima
2025-11-22feat: implement t-1o2c9wcq3go.1Ben Sima
2025-11-22Cleanup from worker agent mergeBen Sima
2025-11-22Fix: Type checking errors in Web.py and Core.pyBen Sima
2025-11-22Merge task t-rWbMpxaBk: Metrics view in Admin dashboardBen Sima
2025-11-22Merge task t-1rf15iH: Audio crossfadingBen Sima
2025-11-22Merge task t-1neWD8r: Worker error handling testsBen Sima
2025-11-22Merge task t-1neWyaO: Admin dashboard testsBen Sima
2025-11-22Merge task t-1fbElKv: Implement change email address functionalityBen Sima
2025-11-22Merge task t-1fbDyr2: Implement delete account functionalityBen Sima
2025-11-22Merge task t-1f9Td4U: Navbar Styling CleanupBen Sima
2025-11-22Merge task t-1f9SnU7: Queue Status ImprovementsBen Sima
2025-11-22feat: implement t-1neWyaOBen Sima
2025-11-22feat: implement t-1fbElKvBen Sima
2025-11-22feat: implement t-1fbDyr2Ben Sima
2025-11-22feat: implement t-1f9Td4UBen Sima
2025-11-22Fix form method to POST for upgrade actionOmni Worker
2025-11-22Fix syntax error in UI.py (missing closing parenthesis)Omni Worker
2025-11-22Add type ignore to html.form in UI.pyOmni Worker
2025-11-22Fix mypy errors in Biz/PodcastItLater/UI.pyOmni Worker
Amp-Thread-ID: https://ampcode.com/threads/T-9e42644b-2a21-40e9-923c-e63f9026b0a6 Co-authored-by: Amp <amp@ampcode.com>
2025-11-22task: claim t-rWbMpxaBkOmni Worker
2025-11-22task: claim t-rWbMpxaBkOmni Worker
2025-11-22task: claim t-rWbMpxaBkOmni Worker
2025-11-22task: claim t-rWbMpxaBkOmni Worker
2025-11-22task: sync databaseOmni Worker
2025-11-21feat: implement t-1rf15iHBen Sima
2025-11-21feat: implement t-1neWD8rBen Sima
2025-11-20feat: implement t-144gQryBen Sima
2025-11-20feat: implement t-1f9SnU7Ben Sima
2025-11-20feat: implement t-1f9RIzdBen Sima
2025-11-20Implement Account Management PageBen Sima
Amp-Thread-ID: https://ampcode.com/threads/T-51eb1377-abce-430c-bde5-ef909ac79444 Co-authored-by: Amp <amp@ampcode.com>
2025-11-20feat: implement t-1f9RIzdBen Sima
2025-11-20feat: implement t-144gQryBen Sima
2025-11-20Merge branch 'task/t-PpYZt2' into liveBen Sima
2025-11-20doc: add design docs for open epicsBen Sima
- Omni/Task/DESIGN.md: Task manager improvements - Biz/PodcastItLater/DESIGN.md: Architecture and features - Biz/PodcastItLater/TESTING.md: Test strategy - Network/Wai/Middleware/Braid/DESIGN.md: Keep-alive design
2025-11-20feat: implement t-PpYZt2Ben Sima
2025-11-19Implement usage tracking and limits enforcementBen Sima
- Fix get_usage() to count from user_episodes table instead of episodes.user_id - Now correctly tracks when episodes are added to user's feed - Handles shared/existing episodes properly (count against the user who added them) - Add comprehensive test suite for usage limits (TestUsageLimits): - test_usage_counts_episodes_added_to_feed - test_usage_counts_existing_episodes_correctly - test_free_tier_limit_enforcement (10 articles) - test_can_submit_blocks_at_limit - test_paid_tier_unlimited - Billing.can_submit() now properly enforces 10 article limit for free tier - Usage tracking via user_episodes.added_at ensures accurate billing Completes t-144eKR1
2025-11-18Change RSS feed URLs from .xml to .rss with backwards compatibilityBen Sima
- Change primary feed URLs to use .rss extension (more semantically correct) - /feed/{token}.xml -> /feed/{token}.rss - /public.rss stays the same - Add .xml aliases for backwards compatibility - /feed/{token}.xml redirects to .rss handler - /public.xml redirects to .rss handler - Add tests to verify both extensions work and return identical content - Update all references in UI and tests to use .rss This provides consistency (.rss everywhere) while maintaining backwards compatibility for existing feed subscribers using .xml URLs. Amp-Thread-ID: https://ampcode.com/threads/T-6d73d458-3d80-44e5-865f-358a69e5b2bf Co-authored-by: Amp <amp@ampcode.com>
2025-11-18Fix homepage auto-refresh and add test coverage for admin workflowsBen Sima
- Fix dashboard-updates endpoint to return Response with both components concatenated as HTML strings, preventing episodes from disappearing after HTMX innerHTML swap - Add viewing_own_feed flag to EpisodeList to hide 'In your feed' button when users are viewing their own feed on homepage - Add test coverage for admin adding user episodes to own feed - Add test coverage for admin adding user episodes to public feed Amp-Thread-ID: https://ampcode.com/threads/T-6d73d458-3d80-44e5-865f-358a69e5b2bf Co-authored-by: Amp <amp@ampcode.com>
2025-11-18Add 'Add to my feed' button to public feed for logged-in usersBen Sima
When viewing the public feed (or any episode list), logged-in users now see: - 'Add to my feed' button if episode is not in their feed - 'In your feed' button (disabled) if they already have it Implementation: - Added user_button logic to EpisodeList component - Checks Core.Database.user_has_episode() for each episode - Shows blue outline button for add action - Shows gray disabled button when already added - Buttons displayed in flex row with admin buttons Updated add_episode_to_feed endpoint: - Changed to redirect back to referer page after adding - Uses HX-Redirect to reload the page showing updated state - This allows the button to change from 'Add to my feed' to 'In your feed' All tests passing (48 tests)
2025-11-18Fix type mismatch in track_episode_metric loggingBen Sima
Changed logger format from %d to %s for episode_id to handle cases where the ID might be passed as a string from route parameters. Error was: Message: 'Tracked %s event for episode %d (user: %s)' Arguments: ('added', '2', 1) Using %s is more flexible and works with both int and str types.
2025-11-16Improve privacy and UX for public feed controlsBen Sima
Privacy improvements: - Removed email address from episode page signup banner - Changed 'This episode was created by <email>' to 'This episode was created using PodcastItLater' - Protects user privacy while still showing the signup prompt Admin UI improvements: - Removed floating Public/Private toggle button (was confusing) - Added '+ Add to public feed' button at bottom of episode cards - Button only visible to admin users - Shows 'Added to public feed' with checkmark when already public - Shows '+ Add to public feed' with plus icon when private - Clearer and more actionable UX for managing public feed content All tests passing (48 tests)