URL Shortener — Application Architecture
Click any component to explore it. Built with Spring Boot 4, Vaadin Flow 25, jOOQ, and PostgreSQL.
URL Shortener — Application Architecture
Delivery layer (Vaadin views + Spring MVC controller)
LoginView
Request magic link
HomeView
Shorten a URL
MyLinksView
Manage owned links
AnalyticsView
Per-link click stats
RedirectController
GET /{code} → 302
Auth
MagicLinkFilter
Validate token
SecurityConfig
Spring Security chain
Application services (no delivery/HTTP dependencies)
MagicLinkService
Token gen, email, rate limit
ShortUrlService
Create, delete, expire URLs
ClickService
Record, count, query
Caffeine Cache
short-url, 10 min TTL
Repository layer (jOOQ — type-safe SQL, generated from Flyway migrations)
UserRepository
findOrCreate upsert
TokenRepository
Atomic consumeToken
ShortUrlRepository
Base62 on insert ID
ClickRepository
Insert, count, fetch
PostgreSQL
users
uuid, email
magic_link_token
token, user_id, expires_at
url_mapping
short_code, original_url
click_event
short_code, referrer
JavaMailSender → SMTP
Mailpit (dev) / prod SMTP
Legend
Vaadin UI views
Auth / security
Services
Repositories (jOOQ)
Caching
External / controller