All notable changes to the SplitLink project will be documented in this file.
The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.
- Frontend inline edit modal: Edit button in detail modal opens pre-filled form for title/URL/description, PATCHes on save, shows updated data — no full-page reload needed
escapeHtml()helper to prevent XSS in dynamic content rendering
- Refactored
api/link.py: extracted_extract_analytics()helper to deduplicateAnalyticsDataconstruction (3 occurrences → 1), removed unused_dict_to_link_response()converter, removed unuseddatetimeandJSONResponseimports, extracted_not_found()helper to DRY up 404 checks (5 occurrences → 1)
- Refactored
link_service.py: extracted_fetch_link()and_fetch_analytics()helpers to eliminate 7 duplicated JOIN-query +_row_to_dictblocks, reducing code duplication and improving maintainability
- README: Document PATCH
/api/links/{link_id}endpoint with request/response examples - README: Add "Update existing links" to Features section
- README: Note
updated_atbehavior (refreshed on PATCH) in Schema section - README: Update architecture tree to reflect
LinkUpdateschema in schemas listing - README: Update test count from "30+" to "45+"
- README: Add PATCH endpoint to Getting Started / Running Tests section
- PATCH
/api/links/{link_id}endpoint for partial updates to title, url, and/or description LinkUpdatePydantic schema with all optional fieldsupdate_linkservice function that builds dynamic SQL SET clauses- Tests for update endpoint: title-only, url-only, description-only, clear description, all fields, empty body, missing link, analytics preservation, timestamp update
- CHANGELOG.md — project changelog following Keep a Changelog format
- LICENSE — MIT license file
- pytest test suite — 30+ tests covering CRUD operations, analytics, health check, search, input validation
- Comprehensive README documentation with architecture diagram, API reference, and deployment guide
- pyproject.toml — filled empty
descriptionfield with project summary - pyproject.toml — added ruff lint configuration for code quality
- FastAPI application scaffold with layered architecture (core, api, services, schemas)
- Payment split link generation — create shareable URLs for pooling expenses
- Link analytics — track clicks, open rates, and average settlement amounts
- Async SQLite database with aiosqlite — zero-config persistence
- RESTful CRUD API for links (create, read, list, delete) with pagination
- Click and settlement tracking endpoints
- Search and filter links by title, URL, or description
- Analytics API endpoint per link
- Health check endpoint at GET /health
- CORS middleware for frontend integration
- Pydantic models for request/response validation
- Environment configuration via pydantic-settings with .env file
- Docker single-stage build with Python 3.11-slim
- Buildless frontend with Tailwind CSS CDN
- Development dependencies: pytest, pytest-asyncio, httpx
- hatchling build system with pyproject.toml