Diff
1diff --git a/.serena/.gitignore b/.serena/.gitignore
2deleted file mode 100644
3index 14d86ad623010057a726185db3690c2d04126984..0000000000000000000000000000000000000000
4--- a/.serena/.gitignore
5+++ /dev/null
6@@ -1 +0,0 @@
7-/cache
8diff --git a/.serena/memories/code_style_conventions.md b/.serena/memories/code_style_conventions.md
9deleted file mode 100644
10index e09511b98427c1618c4c7efc0417585eaeb17426..0000000000000000000000000000000000000000
11--- a/.serena/memories/code_style_conventions.md
12+++ /dev/null
13@@ -1,36 +0,0 @@
14-# Code Style and Conventions
15-
16-## General Style
17-- **Indentation**: Tabs with size 4 (as per .editorconfig)
18-- **Line Endings**: LF (Unix-style)
19-- **Charset**: UTF-8
20-- **Trailing Whitespace**: Must be trimmed
21-- **Final Newline**: Required in all files
22-
23-## YAML/TOML Files
24-- **Indentation**: 2 spaces (not tabs)
25-
26-## Go-Specific Conventions
27-- **Go Version**: 1.25
28-- **Formatting**: Uses `gofmt`, `gofumpt`, and `goimports`
29-- **Import Grouping**: Via `gci` with sections:
30- - standard library
31- - default (third-party)
32- - localmodule (project imports)
33-
34-## Linting Rules
35-Enabled linters:
36-- `forbidigo`: Prevents use of forbidden identifiers
37-- `lll`: Line length limit
38-- `prealloc`: Detects slice declarations that could preallocate
39-- `predeclared`: Finds shadowing of predeclared identifiers
40-- `staticcheck`: Static analysis checks
41-
42-Disabled linters:
43-- `errcheck`: Error checking is disabled
44-
45-Mock files in `mocks/` directory are excluded from most linting rules.
46-
47-## File Generation
48-- Templates use `templ` and must be regenerated via `templ generate` before building
49-- Mocks are generated using `moq` tool
50diff --git a/.serena/memories/project_overview.md b/.serena/memories/project_overview.md
51deleted file mode 100644
52index e9697533f94af1d8e6bcd4774d97b8c9e404b38a..0000000000000000000000000000000000000000
53--- a/.serena/memories/project_overview.md
54+++ /dev/null
55@@ -1,44 +0,0 @@
56-# Ytrssil API - Project Overview
57-
58-## Purpose
59-Ytrssil API is a YouTube RSS-to-interface layer application. It provides an HTTP API for managing YouTube channel subscriptions and video tracking with watch progress functionality.
60-
61-## Tech Stack
62-- **Language**: Go 1.25
63-- **Web Framework**: Gin (github.com/gin-gonic/gin v1.11.0)
64-- **Templating**: templ (github.com/a-h/templ v0.3.960) for HTML generation
65-- **Database**: PostgreSQL (via lib/pq driver)
66-- **Testing**: testify (github.com/stretchr/testify v1.11.1)
67-- **Hot Reload**: air (for development)
68-- **Containerization**: Docker with buildx
69-
70-## Project Structure
71-```
72-.
73-├── cmd/ # Entry point (main.go)
74-├── httpserver/ # HTTP server implementations
75-│ ├── ytrssil/ # Main API routes
76-│ └── auth/ # Authentication routes
77-├── handler/ # Business logic handlers
78-│ ├── channels.go
79-│ ├── videos.go
80-│ └── handler_test.go
81-├── models/ # Data models
82-│ ├── channel.go
83-│ └── video.go
84-├── db/ # Database layer
85-│ ├── db.go
86-│ ├── psql.go
87-│ ├── channels.go
88-│ └── videos.go
89-├── feedparser/ # RSS feed parsing logic
90-├── pages/ # templ templates for HTML pages
91-├── lib/ # Shared libraries
92-├── mocks/ # Generated mock interfaces for testing
93-├── migrations/ # Database migrations
94-├── config/ # Configuration files
95-└── assets/ # Static assets
96-```
97-
98-## Dependencies
99-Database runs on PostgreSQL 18 via Docker Compose.
100diff --git a/.serena/memories/suggested_commands.md b/.serena/memories/suggested_commands.md
101deleted file mode 100644
102index 42026c4932e77b38ac4c1fcf044dbe6050d01fbe..0000000000000000000000000000000000000000
103--- a/.serena/memories/suggested_commands.md
104+++ /dev/null
105@@ -1,60 +0,0 @@
106-# Suggested Commands
107-
108-## Development Commands
109-
110-### Building
111-```bash
112-make build # Generate templates and build binary to dist/ytrssil
113-templ generate # Generate Go code from templ templates
114-```
115-
116-### Testing
117-```bash
118-make test # Run tests with race detection and benchmarks (10s timeout)
119-go test -timeout=10s -race -benchmem ./...
120-```
121-
122-### Linting and Formatting
123-```bash
124-make lint # Run full linting pipeline:
125- # - go mod tidy
126- # - go vet
127- # - golangci-lint fmt (format)
128- # - golangci-lint run (lint)
129-```
130-
131-### Development Server
132-```bash
133-make air # Start hot-reload development server using air
134-```
135-
136-### Mock Generation
137-```bash
138-make gen-mocks # Generate mock implementations for testing:
139- # - db/DB interface
140- # - feedparser/Parser interface
141- # - lib/clients/youtube/Client interface
142-```
143-
144-### Database
145-```bash
146-make migrate # Run database migrations
147- # Default: postgres://ytrssil:ytrssil@localhost:5432/ytrssil?sslmode=disable
148- # Override with: make migrate DB_URI=<your-uri>
149-```
150-
151-### Docker
152-```bash
153-make image-build # Build and push Docker images:
154- # - theedgeofrage/ytrssil:api
155- # - theedgeofrage/ytrssil:migrations
156-
157-docker compose up # Start full stack (postgres + api + migrations)
158-```
159-
160-## Binary Installation (in bin/)
161-The Makefile installs tools locally to avoid global pollution:
162-- `bin/moq`: Mock generator
163-- `bin/golangci-lint`: Linter
164-- `bin/migrate`: Database migration tool
165-- `bin/air`: Hot reload development server
166diff --git a/.serena/memories/task_completion_checklist.md b/.serena/memories/task_completion_checklist.md
167deleted file mode 100644
168index 6828d5bd782aa195fb4ecbedbeb51832974f748c..0000000000000000000000000000000000000000
169--- a/.serena/memories/task_completion_checklist.md
170+++ /dev/null
171@@ -1,54 +0,0 @@
172-# Task Completion Checklist
173-
174-When completing a coding task in this project, follow these steps:
175-
176-## 1. Code Generation
177-If templates were modified:
178-```bash
179-templ generate
180-```
181-
182-## 2. Mock Generation
183-If interfaces were modified:
184-```bash
185-make gen-mocks
186-```
187-
188-## 3. Linting and Formatting
189-Always run before committing:
190-```bash
191-make lint
192-```
193-This will:
194-- Tidy go.mod dependencies
195-- Run go vet
196-- Format code with golangci-lint
197-- Run static analysis linters
198-
199-## 4. Testing
200-Run the test suite:
201-```bash
202-make test
203-```
204-Tests run with:
205-- 10 second timeout
206-- Race detection enabled
207-- Benchmark memory tracking
208-
209-## 5. Build Verification
210-Ensure the project builds:
211-```bash
212-make build
213-```
214-
215-## 6. Database Migrations
216-If database schema changed:
217-```bash
218-make migrate
219-```
220-
221-## Notes
222-- All commands should pass without errors
223-- The project uses tabs for indentation (size 4)
224-- Mock files are auto-excluded from linting
225-- Tests should complete within 10 seconds
226diff --git a/.serena/project.yml b/.serena/project.yml
227deleted file mode 100644
228index 2d70284c0b28e1e88d903a9cd018567266653ef6..0000000000000000000000000000000000000000
229--- a/.serena/project.yml
230+++ /dev/null
231@@ -1,84 +0,0 @@
232-# list of languages for which language servers are started; choose from:
233-# al bash clojure cpp csharp csharp_omnisharp
234-# dart elixir elm erlang fortran go
235-# haskell java julia kotlin lua markdown
236-# nix perl php python python_jedi r
237-# rego ruby ruby_solargraph rust scala swift
238-# terraform typescript typescript_vts yaml zig
239-# Note:
240-# - For C, use cpp
241-# - For JavaScript, use typescript
242-# Special requirements:
243-# - csharp: Requires the presence of a .sln file in the project folder.
244-# When using multiple languages, the first language server that supports a given file will be used for that file.
245-# The first language is the default language and the respective language server will be used as a fallback.
246-# Note that when using the JetBrains backend, language servers are not used and this list is correspondingly ignored.
247-languages:
248-- go
249-
250-# the encoding used by text files in the project
251-# For a list of possible encodings, see https://docs.python.org/3.11/library/codecs.html#standard-encodings
252-encoding: "utf-8"
253-
254-# whether to use the project's gitignore file to ignore files
255-# Added on 2025-04-07
256-ignore_all_files_in_gitignore: true
257-
258-# list of additional paths to ignore
259-# same syntax as gitignore, so you can use * and **
260-# Was previously called `ignored_dirs`, please update your config if you are using that.
261-# Added (renamed) on 2025-04-07
262-ignored_paths: []
263-
264-# whether the project is in read-only mode
265-# If set to true, all editing tools will be disabled and attempts to use them will result in an error
266-# Added on 2025-04-18
267-read_only: false
268-
269-# list of tool names to exclude. We recommend not excluding any tools, see the readme for more details.
270-# Below is the complete list of tools for convenience.
271-# To make sure you have the latest list of tools, and to view their descriptions,
272-# execute `uv run scripts/print_tool_overview.py`.
273-#
274-# * `activate_project`: Activates a project by name.
275-# * `check_onboarding_performed`: Checks whether project onboarding was already performed.
276-# * `create_text_file`: Creates/overwrites a file in the project directory.
277-# * `delete_lines`: Deletes a range of lines within a file.
278-# * `delete_memory`: Deletes a memory from Serena's project-specific memory store.
279-# * `execute_shell_command`: Executes a shell command.
280-# * `find_referencing_code_snippets`: Finds code snippets in which the symbol at the given location is referenced.
281-# * `find_referencing_symbols`: Finds symbols that reference the symbol at the given location (optionally filtered by type).
282-# * `find_symbol`: Performs a global (or local) search for symbols with/containing a given name/substring (optionally filtered by type).
283-# * `get_current_config`: Prints the current configuration of the agent, including the active and available projects, tools, contexts, and modes.
284-# * `get_symbols_overview`: Gets an overview of the top-level symbols defined in a given file.
285-# * `initial_instructions`: Gets the initial instructions for the current project.
286-# Should only be used in settings where the system prompt cannot be set,
287-# e.g. in clients you have no control over, like Claude Desktop.
288-# * `insert_after_symbol`: Inserts content after the end of the definition of a given symbol.
289-# * `insert_at_line`: Inserts content at a given line in a file.
290-# * `insert_before_symbol`: Inserts content before the beginning of the definition of a given symbol.
291-# * `list_dir`: Lists files and directories in the given directory (optionally with recursion).
292-# * `list_memories`: Lists memories in Serena's project-specific memory store.
293-# * `onboarding`: Performs onboarding (identifying the project structure and essential tasks, e.g. for testing or building).
294-# * `prepare_for_new_conversation`: Provides instructions for preparing for a new conversation (in order to continue with the necessary context).
295-# * `read_file`: Reads a file within the project directory.
296-# * `read_memory`: Reads the memory with the given name from Serena's project-specific memory store.
297-# * `remove_project`: Removes a project from the Serena configuration.
298-# * `replace_lines`: Replaces a range of lines within a file with new content.
299-# * `replace_symbol_body`: Replaces the full definition of a symbol.
300-# * `restart_language_server`: Restarts the language server, may be necessary when edits not through Serena happen.
301-# * `search_for_pattern`: Performs a search for a pattern in the project.
302-# * `summarize_changes`: Provides instructions for summarizing the changes made to the codebase.
303-# * `switch_modes`: Activates modes by providing a list of their names
304-# * `think_about_collected_information`: Thinking tool for pondering the completeness of collected information.
305-# * `think_about_task_adherence`: Thinking tool for determining whether the agent is still on track with the current task.
306-# * `think_about_whether_you_are_done`: Thinking tool for determining whether the task is truly completed.
307-# * `write_memory`: Writes a named memory (for future reference) to Serena's project-specific memory store.
308-excluded_tools: []
309-
310-# initial prompt for the project. It will always be given to the LLM upon activating the project
311-# (contrary to the memories, which are loaded on demand).
312-initial_prompt: ""
313-
314-project_name: "api"
315-included_optional_tools: []