Skip to content

Commit 82c56bc

Browse files
authored
Merge pull request #9 from thlaure/feat/roadmap-landing-team-phases
docs: add landing page and team phases to roadmap
2 parents cb096b5 + ba8fe1f commit 82c56bc

3 files changed

Lines changed: 170 additions & 90 deletions

File tree

CLAUDE.md

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -50,10 +50,12 @@ docker compose up -d --build
5050

5151
## 1.2 Project Phases
5252

53-
1. **Phase 1 (MVP):** Core RSS engine, PostgreSQL schema, Dashboard UI ✅
54-
2. **Phase 2 (AI Layer):** Symfony AI for summaries and auto-tagging
55-
3. **Phase 3 (Automation):** Newsletter scheduler, Raindrop.io sync
56-
4. **Phase 4 (Ecosystem):** Spotlight command engine, MCP server
53+
1. **Phase 1 (MVP):** Core RSS engine, PostgreSQL schema, Inbox UI ✅
54+
2. **Phase 2 (Landing Page):** Marketing site, waitlist, pricing
55+
3. **Phase 3 (AI Layer):** Symfony AI for summaries and auto-tagging
56+
4. **Phase 4 (Automation):** Newsletter scheduler, Raindrop.io sync
57+
5. **Phase 5 (Team):** Multi-user workspace, roles, billing
58+
6. **Phase 6 (Ecosystem):** Spotlight command engine, MCP server, social sharing
5759

5860
---
5961

README.md

Lines changed: 75 additions & 70 deletions
Original file line numberDiff line numberDiff line change
@@ -1,108 +1,113 @@
11
# Signalist
22

3-
Here is the technical and functional specification document for **Signalist**.
3+
**AI-powered news curation and publishing platform for small teams.**
44

5-
---
6-
7-
# Technical Specifications: Signalist
5+
Signalist helps news curators, content teams, and media monitors stay on top of
6+
their industry — aggregating RSS feeds, synthesizing content with AI, and
7+
publishing insights across newsletters and social media.
88

9-
## 1. Project Overview
10-
11-
**Signalist** is a smart intelligence platform (SaaS) designed to aggregate, filter, and synthesize RSS feeds using Artificial Intelligence. The application features a natural language command interface (like Spotlight on macOS) and exposes its data via the Model Context Protocol (MCP) to integrate with the broader LLM ecosystem.
9+
---
1210

13-
## 2. Functional Requirements
11+
## What it does
1412

15-
### 2.1 Feed Management (RSS)
13+
**Monitor → Curate → Synthesize → Publish**
1614

17-
* **Categorization:** Create, update, and delete thematic categories.
18-
* **Aggregation:** Link one or multiple RSS feeds to a specific category.
19-
* **Content Extraction:** Use libraries (e.g., Readability) to fetch full article content for AI processing, bypassing partial RSS snippets.
15+
- **Aggregate** RSS feeds into categorized, searchable inboxes
16+
- **Summarize** articles automatically with LLMs (OpenAI, Anthropic, Mistral)
17+
- **Bookmark & tag** content with AI-assisted auto-tagging
18+
- **Generate newsletters** from curated articles, configurable by reading time
19+
- **Publish** to social media (X, LinkedIn, Threads, Bluesky, WhatsApp)
20+
- **Search** with full-text and semantic (vector) search
2021

21-
### 2.2 Navigation & Filtering
22+
---
2223

23-
* **Global Dashboard:** A chronological feed of all incoming articles.
24-
* **Categorized Views:** Filter content by category, specific source, or date range.
25-
* **Advanced Search:** Support for both full-text search and semantic search (Vector Search).
24+
## Tech Stack
2625

27-
### 2.3 Bookmarking & Tagging
26+
| Layer | Technology |
27+
|-------|------------|
28+
| **Backend** | PHP 8.5 · Symfony 7.4 · API Platform 4.x · FrankenPHP |
29+
| **Frontend** | React 19 · TypeScript · Vite 7 · MUI v7 · react-i18next |
30+
| **Database** | PostgreSQL 16 · pgvector |
31+
| **Queue** | Symfony Messenger · Redis |
32+
| **AI** | Symfony AI (OpenAI / Anthropic / Mistral) |
33+
| **Auth** | LexikJWT |
34+
| **Testing** | PHPUnit · Behat · Vitest · React Testing Library |
2835

29-
* **Storage:** Save articles to a "Bookmarks" section.
30-
* **Intelligent Tagging:** * Automatic tag generation via LLM based on content analysis.
31-
* Manual tag management.
36+
---
3237

38+
## Architecture
3339

34-
* **Raindrop.io Integration:** Synchronize bookmarks and tags with the Raindrop.io API.
40+
Hexagonal Architecture + CQRS + DDD
3541

36-
### 2.4 AI-Powered Newsletters
42+
```
43+
Request → Controller → InputDTO → Command/Query → Handler → Repository
44+
45+
Messenger (async)
46+
47+
AI / RSS / External APIs
48+
```
3749

38-
* **Dynamic Generation:** Use LLMs (via Symfony AI) to synthesize summaries of unread articles.
39-
* **Newsletter Structure:** Grouped by category, including clickable titles and concise summaries.
40-
* **Reading Time Calibration:** * Default duration: 5 minutes.
41-
* Customizable duration: Logic based on a **200 words-per-minute** ratio.
50+
---
4251

52+
## Getting Started
4353

44-
* **Scheduling:** Automated delivery at set intervals (daily, weekly, custom) using Symfony Scheduler.
45-
* **Manual Composition:** Interface to manually select articles and send to a custom mailing list.
54+
### Prerequisites
4655

47-
### 2.5 Social Sharing
56+
- Docker & Docker Compose
57+
- Make
4858

49-
* Direct sharing integration for WhatsApp, X (Twitter), LinkedIn, Threads, Bluesky.
59+
### Install
5060

51-
---
61+
```bash
62+
git clone https://github.com/thlaure/Signalist.git
63+
cd Signalist
64+
make install
65+
```
5266

53-
## 3. Interface & User Experience (UX)
67+
Or manually:
5468

55-
### 3.1 Layout
69+
```bash
70+
docker compose up -d --build
71+
docker compose exec app composer install
72+
docker compose exec app php bin/console lexik:jwt:generate-keypair
73+
docker compose exec app php bin/console doctrine:migrations:migrate
74+
```
5675

57-
* **Dashboard:** Central feed focused on readability and minimalism.
58-
* **Sidepanel:** Left-aligned navigation for categories, bookmarks, and settings.
59-
* **Visual Style:** Minimalist UI, high-contrast typography, native dark mode support.
76+
The app is available at `http://localhost:8000`.
6077

61-
### 3.2 "Spotlight" Command Center
78+
### Useful commands
6279

63-
* Global search/command bar (accessible via `Cmd+K`).
64-
* **Natural Language Processing (NLP):** Map user intent to backend actions (e.g., "Add [https://example.com/feed](https://example.com/feed) to Dev category").
65-
* **Direct Execution:** Perform CRUD operations and AI queries directly from the command bar.
80+
| Command | Description |
81+
|---------|-------------|
82+
| `make lint` | PHP CS Fixer |
83+
| `make analyse` | PHPStan (level 9) |
84+
| `make rector` | Rector modernization |
85+
| `make quality` | All quality checks |
86+
| `make tests-unit` | PHPUnit unit tests |
87+
| `make grumphp` | Full pre-commit suite |
88+
| `make help` | All available commands |
6689

6790
---
6891

69-
## 4. Technical Stack
70-
71-
### 4.1 Backend
72-
73-
* **Framework:** Symfony 8.x (utilizing PHP 8.5 features).
74-
* **Frontend:** React with TypeScript, Vite, and MUI for component styling.
75-
* **Architecture:** CQRS, Clean Architecture, SOLID principles, Hexagonal architecture for maintainability and testability.
76-
* **Testing:** PHPUnit for backend (unit and integration + code coverage UI, test what it needs to be tested, 100% coverage), Jest + React Testing Library for frontend.
77-
* **Database:** PostgreSQL with **pgvector** extension for storing and querying embeddings.
78-
* **Queue Management:** Symfony Messenger + Redis for background RSS crawling and LLM processing.
79-
80-
### 4.2 AI & Interoperability
92+
## Roadmap
8193

82-
* **Symfony AI:** Core component for LLM abstraction (OpenAI, Anthropic, Mistral).
83-
* **AI Agents:** Implementation of `#[AsTool]` attributes to connect the Spotlight interface to PHP services.
84-
* **MCP (Model Context Protocol):** Implementation of a native MCP server to allow external LLMs to query the user's Signalist data securely.
94+
1. **Phase 1 — MVP** ✅ Core RSS engine, auth, Inbox UI
95+
2. **Phase 2 — Landing Page** Marketing site, waitlist, pricing
96+
3. **Phase 3 — AI Layer** Summaries, embeddings, semantic search, auto-tagging
97+
4. **Phase 4 — Automation** Newsletter scheduler, Raindrop.io sync
98+
5. **Phase 5 — Team** Multi-user workspace, roles, billing
99+
6. **Phase 6 — Ecosystem** Spotlight (`Cmd+K`), MCP server, social publishing
85100

86-
### 4.3 Third-Party APIs
87-
88-
* **Raindrop.io:** OAuth2 authentication for bookmark synchronization.
89-
* **Emailing:** Symfony Mailer
101+
See [`docs/ROADMAP.md`](docs/ROADMAP.md) for the full task breakdown.
90102

91103
---
92104

93-
## 5. Development Constraints & Accuracy
105+
## Contributing
94106

95-
* **Factual Integrity:** All AI-generated summaries must provide a direct link to the original source to prevent misinformation.
96-
* **Performance:** RSS parsing and vector generation must be handled asynchronously to maintain UI responsiveness.
97-
* **Scalability:** The architecture must support the "Bring Your Own Key" (BYOK) model for LLM API costs, but if the user does not provide a key, the system should default to a shared organizational key with usage limits.
107+
This project is in active development. Contributions are not open yet.
98108

99109
---
100110

101-
## 6. Project Roadmap
102-
103-
1. **Phase 1 (MVP):** Core RSS engine, PostgreSQL schema, and basic Dashboard UI.
104-
2. **Phase 2 (AI Layer):** Symfony AI integration for summaries and automated tagging.
105-
3. **Phase 3 (Automation):** Newsletter scheduler and Raindrop.io sync.
106-
4. **Phase 4 (Ecosystem):** Spotlight command engine and MCP server implementation.
111+
## License
107112

108-
---
113+
Private — all rights reserved.

docs/ROADMAP.md

Lines changed: 89 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -261,9 +261,42 @@
261261

262262
---
263263

264-
## Phase 2 — AI Layer: Summaries, Embeddings & Semantic Search
264+
## Phase 2 — Landing Page
265265

266-
### 2.1 Symfony AI Integration
266+
### 2.1 Design & Content
267+
268+
| Task | Status |
269+
|------|--------|
270+
| Value proposition copywriting | Not Started |
271+
| Wireframes / mockup (Figma or equivalent) | Not Started |
272+
| Pricing tiers definition (free, team, enterprise) | Not Started |
273+
274+
### 2.2 Implementation
275+
276+
| Task | Status |
277+
|------|--------|
278+
| Landing page setup (separate from app) | Not Started |
279+
| Hero section (headline, subheadline, CTA) | Not Started |
280+
| Features section | Not Started |
281+
| Pricing section | Not Started |
282+
| Social proof / testimonials section | Not Started |
283+
| Waitlist / early access form | Not Started |
284+
| SEO meta tags + Open Graph | Not Started |
285+
| Responsive design (mobile + desktop) | Not Started |
286+
287+
### 2.3 Infrastructure
288+
289+
| Task | Status |
290+
|------|--------|
291+
| Domain configuration | Not Started |
292+
| Deploy to production (Vercel / Netlify / other) | Not Started |
293+
| Analytics (privacy-friendly, e.g. Plausible) | Not Started |
294+
295+
---
296+
297+
## Phase 3 — AI Layer: Summaries, Embeddings & Semantic Search
298+
299+
### 3.1 Symfony AI Integration
267300

268301
| Task | Status |
269302
|------|--------|
@@ -272,7 +305,7 @@
272305
| Environment variables for API keys | Not Started |
273306
| AI client adapter (`Infrastructure/AI/`) | Not Started |
274307

275-
### 2.2 Article Embeddings (pgvector)
308+
### 3.2 Article Embeddings (pgvector)
276309

277310
| Task | Status |
278311
|------|--------|
@@ -285,7 +318,7 @@
285318
| Embedding generation adapter (OpenAI / Mistral) | Not Started |
286319
| Unit tests for embedding pipeline | Not Started |
287320

288-
### 2.3 Semantic Search
321+
### 3.3 Semantic Search
289322

290323
| Task | Status |
291324
|------|--------|
@@ -299,7 +332,7 @@
299332
| Frontend search UI with results | Not Started |
300333
| Unit + integration tests | Not Started |
301334

302-
### 2.4 LLM Summarization
335+
### 3.4 LLM Summarization
303336

304337
| Task | Status |
305338
|------|--------|
@@ -311,7 +344,7 @@
311344
| Frontend summary display | Not Started |
312345
| Unit tests for summarization | Not Started |
313346

314-
### 2.5 Auto-Tagging
347+
### 3.5 Auto-Tagging
315348

316349
| Task | Status |
317350
|------|--------|
@@ -324,7 +357,7 @@
324357
| Frontend tag display + filtering | Not Started |
325358
| Unit tests | Not Started |
326359

327-
### 2.6 Data Anonymization (GDPR)
360+
### 3.6 Data Anonymization (GDPR)
328361

329362
| Task | Status |
330363
|------|--------|
@@ -336,9 +369,9 @@
336369

337370
---
338371

339-
## Phase 3 — Automation: Newsletters, Scheduling & Sync
372+
## Phase 4 — Automation: Newsletters, Scheduling & Sync
340373

341-
### 3.1 Newsletter Domain
374+
### 4.1 Newsletter Domain
342375

343376
| Task | Status |
344377
|------|--------|
@@ -354,7 +387,7 @@
354387
| Newsletter API Platform resource | Not Started |
355388
| Unit tests for all handlers | Not Started |
356389

357-
### 3.2 Newsletter Content Generation
390+
### 4.2 Newsletter Content Generation
358391

359392
| Task | Status |
360393
|------|--------|
@@ -366,7 +399,7 @@
366399
| HTML email template | Not Started |
367400
| Unit tests | Not Started |
368401

369-
### 3.3 Newsletter Scheduling
402+
### 4.3 Newsletter Scheduling
370403

371404
| Task | Status |
372405
|------|--------|
@@ -379,7 +412,7 @@
379412
| Schedule management UI (frontend) | Not Started |
380413
| Unit + integration tests | Not Started |
381414

382-
### 3.4 Raindrop.io Sync
415+
### 4.4 Raindrop.io Sync
383416

384417
| Task | Status |
385418
|------|--------|
@@ -394,9 +427,49 @@
394427

395428
---
396429

397-
## Phase 4 — Ecosystem: Spotlight, MCP Server & Social Sharing
430+
## Phase 5 — Team: Multi-User Workspace & Collaborative Curation
431+
432+
### 5.1 Organization & Roles
433+
434+
| Task | Status |
435+
|------|--------|
436+
| `Organization` entity + migration | Not Started |
437+
| `OrganizationMember` entity (userId, orgId, role) + migration | Not Started |
438+
| Roles: `admin`, `curator`, `reader` | Not Started |
439+
| `InviteMemberCommand` + `InviteMemberHandler` | Not Started |
440+
| `RemoveMemberCommand` + `RemoveMemberHandler` | Not Started |
441+
| `UpdateMemberRoleCommand` + `UpdateMemberRoleHandler` | Not Started |
442+
| Organization API endpoints | Not Started |
443+
| Role-based access control (Symfony voters) | Not Started |
444+
| Unit tests | Not Started |
445+
446+
### 5.2 Shared Workspace
447+
448+
| Task | Status |
449+
|------|--------|
450+
| Feeds and categories scoped to organization | Not Started |
451+
| Shared bookmarks with curator attribution | Not Started |
452+
| Collaborative annotations on bookmarks | Not Started |
453+
| Activity feed (who curated what, when) | Not Started |
454+
| Per-member read status (independent of shared articles) | Not Started |
455+
| Frontend team workspace UI | Not Started |
456+
| Unit + integration tests | Not Started |
457+
458+
### 5.3 Billing & Plans
459+
460+
| Task | Status |
461+
|------|--------|
462+
| Plan model (free, team, enterprise) | Not Started |
463+
| Per-seat pricing logic | Not Started |
464+
| Usage limits per plan (feeds, members, AI calls) | Not Started |
465+
| Stripe integration (subscriptions) | Not Started |
466+
| Plan management UI | Not Started |
467+
468+
---
469+
470+
## Phase 6 — Ecosystem: Spotlight, MCP Server & Social Sharing
398471

399-
### 4.1 Spotlight Command Interface
472+
### 6.1 Spotlight Command Interface
400473

401474
| Task | Status |
402475
|------|--------|
@@ -409,7 +482,7 @@
409482
| Frontend + backend integration | Not Started |
410483
| Unit tests for command parser | Not Started |
411484

412-
### 4.2 MCP Server (Model Context Protocol)
485+
### 6.2 MCP Server (Model Context Protocol)
413486

414487
| Task | Status |
415488
|------|--------|
@@ -423,7 +496,7 @@
423496
| Authentication for MCP endpoints | Not Started |
424497
| Integration tests | Not Started |
425498

426-
### 4.3 Social Sharing
499+
### 6.3 Social Sharing
427500

428501
| Task | Status |
429502
|------|--------|

0 commit comments

Comments
 (0)