| Age | Commit message (Collapse) | Author |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Amp-Thread-ID:
https://ampcode.com/threads/T-9e42644b-2a21-40e9-923c-e63f9026b0a6
Co-authored-by: Amp <amp@ampcode.com>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Amp-Thread-ID:
https://ampcode.com/threads/T-51eb1377-abce-430c-bde5-ef909ac79444
Co-authored-by: Amp <amp@ampcode.com>
|
|
|
|
|
|
|
|
- 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
|
|
|
|
Amp-Thread-ID: https://ampcode.com/threads/T-0ad36363-7155-4f3f-be83-030581148792
Co-authored-by: Amp <amp@ampcode.com>
|
|
- 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
|
|
- 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>
|
|
- 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>
|
|
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)
|
|
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.
|
|
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)
|
|
Issue #1: demo@example.com admin status - Confirmed demo@example.com
IS in ADMIN_EMAILS (working as intended) - Both Core.py and UI.py
have demo@example.com in whitelist
Issue #2: /public page auto-refresh causing disappearing articles -
Created PublicFeedPage component without auto-refresh - Separated
from HomePage which has dashboard auto-updates - /public route now
uses PublicFeedPage instead of HomePage
Issue #3: Homepage missing public feed for logged-out users - Updated
HomePage to show public feed when user is not logged in - Shows
login form with public episodes below - Includes marketing message:
'Sign up to create your own personal feed!' - Public episodes are
fetched and displayed prominently
Additional improvements: - Added 'Public Feed' link to navbar for
easy access - PublicFeedPage shows RSS feed link for public.rss -
Clear separation between user dashboard (auto-refresh) and public feed
(static)
All tests passing (48 tests)
|
|
- Added admin@example.com to ADMIN_EMAILS in Core.py and UI.py - This
provides a demo admin account for testing - Public/Private toggle
badge already checks for admin status correctly - All tests passing
|
|
- Added Core.Database.get_metrics_summary() for aggregate stats -
Added Core.Database.get_episode_metric_events() for raw event data -
Created MetricsDashboard component with summary cards and top episodes
tables - Added /admin/metrics route with admin authentication -
Added metrics link to admin dropdown menu - Added comprehensive tests
for metrics functionality - Fixed type errors in Admin.py by adding
MetricCardAttrs - All tests passing (48 tests total in Web.py) -
Completed epic t-ga8V8O (24/24 tasks)
|
|
- Enhanced Worker.py to extract publication date and author from
articles - Added intro TTS with metadata (title, author, publication
date) - Added outro TTS with attribution - Combined intro, pauses,
content, and outro in Worker.py - Added comprehensive tests for public
feed, deduplication, metrics, and intro/outro
All tests passing (Worker: 30 tests, Web: 43 tests)
Tasks completed: - t-gcNemK: Extract metadata in Worker.py - t-gcPraJ:
Add intro TTS generation - t-gcRCzw: Add outro TTS generation -
t-gcTPQn: Combine audio segments - t-gcW6zN: Tests for public feed
- t-gdlWtu: Tests for deduplication - t-gdoeYo: Tests for metrics
tracking - t-gdqsl7: Tests for audio intro/outro
|
|
- Added POST /episode/{id}/track endpoint to track play/download
events - Added JavaScript to audio player to track first play event -
JavaScript sends fetch request to tracking endpoint on play - Tracks
user_id if logged in, otherwise anonymous - Added main() function to
Episode.py for test compatibility
Tasks completed: t-gcdFSb, t-gcfTnG
|