• Townie
    AI
  • Blog
  • Docs
  • Pricing
  • We’re hiring!
Log inSign up
project logo

artivilla

rss

newsletters im reading daily
Public
Like
rss
Home
Code
14
.claude
1
.zed
1
frontend
8
services
2
shared
3
.vtignore
ARCHITECTURE.md
CLAUDE.md
README.md
TODO.md
deno.json
C
feed.cron.ts
feeds.json
H
http.ts
Branches
1
Pull requests
Remixes
1
History
Environment variables
Val Town is a collaborative website to build and scale JavaScript apps.
Deploy APIs, crons, & store data – all from the browser, and deployed in milliseconds.
Sign up now
Code
/
ARCHITECTURE.md
Code
/
ARCHITECTURE.md
Search
8/20/2025
Viewing readonly version of main branch: v184
View latest version
ARCHITECTURE.md

Architecture Overview

This is a newsletter aggregator built for Val Town with the following key components:

Core Structure

  • feeds.json: Master configuration file containing feed definitions as [normalizedKey, [categories], feedUrl, optionalDomain?]
  • feed.cron.ts: Cron job that runs every 6 hours to fetch and cache RSS feeds via RSSService.buildAndStore()
  • services/rss.ts: Core RSS processing service that fetches, parses, and stores feed data
  • http.ts: Main HTTP handler for serving the web interface

Frontend (React/TSX)

  • frontend/app.tsx: Main React application component
  • frontend/components/: Reusable UI components for filtering and display
  • frontend/hooks/: Custom React hooks for data fetching and state management
  • frontend/utils/: Utility functions for date formatting and data processing

Data Flow

  1. Cron job (feed.cron.ts) calls RSSService.buildAndStore() every 6 hours
  2. RSS service fetches feeds from URLs in feeds.json and stores processed data in Val Town blob storage
  3. Frontend fetches cached data via useAppData hook and displays with filtering capabilities

Working with this project

  • The main entry points are feed.cron.ts (cron job) and http.ts (web handler)
  • Feed configuration is managed in feeds.json with the format: [normalizedKey, [categories], feedUrl, optionalDomain?]

frontend/components/**

  • FilterContainer.tsx: Manages category and feed-based filtering UI
  • TimeFilter.tsx: Handles time period selection (24h, 48h, 7d, etc.)
  • ListingFilter.tsx: Controls feed-specific filtering
  • CategoryFilter.tsx: Category-based filtering interface
  • FeedsFilter.tsx: Individual feed selection controls
  • Footer.tsx: Application footer component

frontend/hooks/**

  • useAppData.ts: Manages RSS data fetching and state
  • useFeedsConfig.ts: Handles feed configuration loading
  • useTimePeriodFilter.ts: Time-based filtering logic
  • useDateFormatting.ts: Date display utilities
FeaturesVersion controlCode intelligenceCLI
Use cases
TeamsAI agentsSlackGTM
ExploreDocsShowcaseTemplatesNewestTrendingAPI examplesNPM packages
PricingNewsletterBlogAboutCareers
We’re hiring!
Brandhi@val.townStatus
X (Twitter)
Discord community
GitHub discussions
YouTube channel
Bluesky
Terms of usePrivacy policyAbuse contact
© 2025 Val Town, Inc.