Nova Report – Thesis project for news analysis and notification
A thesis project in system integration that focused on building a modular microservice architecture where news data,
AI analysis, crypto payments and notifications are tied together into a single platform. The goal is to show how
several external APIs and data sources can be integrated securely, scalably and automatically.
Project goals
Develop a backend of several Spring Boot microservices that cooperate via REST APIs.
Integrate RSS feeds and APIs from news sources (CoinTelegraph, Decrypt, Coindesk, Reddit, NewsData.io).
Analyse and summarise news feeds with the help of AI to create useful notifications.
Enable payments via cryptocurrency for subscription services.
Distribute notifications to users via Discord, Telegram, email or a web dashboard.
Demonstrate a professional integration solution with a CI/CD flow and container-based operation.
Technical environment
Backend: Java 21, Spring Boot 3, Spring Security, REST APIs
Database: H2 for development, PostgreSQL for production
AI integration: OpenAI – summarisation and sentiment analysis
Data sources: RSS feeds + the NewsData.io API
Payments: Stripe (card/Klarna) and Monero (XMR) via separate payment services
Notifications: Email, Discord, Telegram, web frontend
DevOps: Docker, GitHub Actions, a CI/CD pipeline for automatic build and deploy
Architecture
The platform is built as a network of microservices where each component has a clear responsibility.
reporter-service acts as the data collector and analysis engine,
subscriptions-service manages the user's active subscriptions,
and notifications-service distributes the compiled information to the user.
The payment services handle payments via Stripe (card/Klarna) and Monero (XMR). I wanted to integrate crypto payment in this project because I had already worked with Stripe in earlier projects and always want to learn new things. Bitcoin was planned as a nice-to-have but I didn't get to it.
accounts-service: Management of user accounts, API keys and authentication.
payments-stripe-service & payments-xmr-service: Initiate and verify payments via Stripe and Monero (XMR) respectively.
subscriptions-service: Activates or closes subscriptions depending on payment status.
reporter-service: Collects RSS feeds, filters, summarises and analyses content via AI.
notifications-service: Distributes analyses and notifications to email, Discord, Telegram and the frontend.
An overview of the platform's microservices and the data flows between frontend, backend and external APIs and RSS feeds.
Development phases
The project was developed iteratively in four defined phases, from a functional minimum to a market-ready product.
Each phase represents a colour-coded stage in the architecture diagram.
UMVP (Ultra Minimal Viable Product) – The foundation: RSS collection from one source, simple AI summary, output in the frontend, local operation.
MVP (Minimal Viable Product) – A fully working backend flow: reporter, subscriptions and Discord notifications.
MMP (Minimal Marketable Product) – Integration of payment services (XMR), email and dashboard, deployed to a dedicated server.
Nice to have – Integration of a payment service (BTC), Telegram integration and cloud deployment.
Timeline
Week 1: Pre-study, data sources, system design, a PoC for the reporter-service.
Week 2: Get an Ultra Minimal Viable Product up that delivers a report from one RSS feed.
Week 3: CI/CD plus subscription and account management.
Week 4: Crypto payment and verification.
Week 5: Dashboard and email integration (MMP).
Week 6: Telegram integration, testing and a security review.
Week 7: Documentation and preparation for the demo.
Week 8: Final presentation and portfolio release.
Core questions
The crypto market and the tech sector are marked by an enormous amount of information — thousands of articles,
forum threads and social feeds that are often biased, fragmented or full of noise.
Nova Report explores how modern integration patterns and AI can be used to structure this
information chaos and deliver fact-based insights in real time.
The platform works as a "Crypto Briefing-as-a-Service": it collects news from several sources,
filters out repetition and noise, lets an AI module write summaries, and then delivers the result
directly to the user via email, Discord or dashboard. It is a practical example of how AI, data integration
and security design can work together in a real-world environment.
What does "Crypto Briefing-as-a-Service" mean?
The phrase plays on the SaaS concept (Software as a Service) — cloud-based services that deliver finished
functionality to the user without them having to install anything themselves. So in practice "Crypto
Briefing-as-a-Service" means: an automated service that collects, filters, analyses and summarises news from the
crypto world and delivers finished, easy-to-read reports directly to the user.
How can AI be used to create reliable insights from large, noisy news feeds?
The focus is on text analysis, summarisation and source filtering — not to replace journalism, but to give a faster and more focused overview.
How can a modular architecture balance simplicity, performance and scalability?
By separating services such as payment, reporting and notification, a robust and extensible whole is created.
How can an integration solution be packaged in a clear and transparent way?
The goal is to create a solution that not only works technically but also demonstrates integration flows,
security aspects and data handling in a way that is clear to both technical and non-technical audiences.
Development log
A short weekly log of the project's progress. Click a week to read more.
Week 1 – Planning and basic architecture
Focus: This week I focused on creating the foundations of the project; a lot of it was about setting up a plan that can be carried out over the coming 8 weeks and how I'll do it.
Since I'm doing this project entirely on my own, I decided to use GitHub's Copilot feature to act as a senior developer that reviews my PRs. Because I like to be structured,
I also made a basic "mind map" of the project so I can easily take a look and get visual confirmation that I'm on the right track. I also have an idea about maybe setting up a "kanban board" to make
it easier to see which tasks are done and which are in progress.
Obstacles: So far I haven't run into any major obstacles; it has mostly been about getting what's in my head down "on paper" and doing some basic planning.
Next step: Over the coming week I plan to try to finish a UMVP where a user can register, log in and see a generated report from just one information source directly on a minimal frontend.
Week 2 – A working UMVP runs locally
Focus: This week I finished a UMVP where a user can register, log in and see a generated report from just one information source directly on a minimal frontend.
Over the weekend I also got the AI integration working, using the gpt-4o-mini model from 1minAI to compile a report with the reporter-service. I chose to integrate 1minAI because I have a lot of free credit sitting on that service.
Obstacles: The biggest obstacle this week was getting Copilot on GitHub happy with the code. Every time I made a commit I got between 8–14 comments from Copilot to address. When I'd fixed those I got another batch. So it took a really long time to get an "accepted" PR.
Next step: This week I plan to focus on getting CI/CD working — a flow from my laptop, through GitHub Actions, on to Docker Hub and finally to an Ubuntu server on Contabo. If I have time I also want to add more news sources for a more comprehensive report.
Week 3 – Migration to Postgres and more news sources
Focus: This week I focused on migrating from H2 to Postgres in the production environment and on adding more news sources.
I've now got all 4 RSS feeds in plus an external API for fetching news that I can then build a report from. I've also laid the groundwork for an audit system for my code where AI helps me produce a report on my code and gives me an action list to improve it.
This is something I find really interesting and can hopefully develop further over the coming weeks.
I also managed to get a working pipeline from my laptop, through GitHub Actions, on to Docker Hub and finally to an Ubuntu server. I've done this in several earlier projects, so it went relatively quickly.
Obstacles: The migration to Postgres took more time than planned, mostly because I hadn't worked with Postgres before and didn't have a handle on all the environment variables and so on. I had a lot of trouble with authentication against the database and it took almost a whole day to get right.
Next step: Next week will largely consist of getting a 100% working Monero payment going. I suspect that work will eat up several days, since it doesn't seem as straightforward as adding a Stripe integration, for example.
I've already set up part of the payment flow in both backend and frontend, but the actual payment step is mocked.
Week 4 – From UMVP to MVP/MMP
Focus: In week 4 of this project I went from a UMVP to an MVP/MMP where the system now builds a report from news across several sources.
You can pay with Monero, to the system's own wallet in its own container, but I've stayed on stagenet (Monero with no monetary value) to keep my costs down during all the testing I do. Going from stagenet to mainnet (where real XMR is used) is just a matter of changing a few environment variables.
As before, all users can see the report in the frontend, but now the system can also generate a report adapted for Discord and delivers it to a channel every four hours. The idea here is that a paying member gets access to this channel on a successful subscription.
I have an idea about creating a bot you can send a command to in order to see the report, but that'll have to be a nice-to-have feature to implement if I have time left in the project.
The system now also sends out a daily report by email to registered members. I've also run several audits on the code and implemented the suggested improvements.
I've introduced tests with roughly 80% code coverage on both frontend and backend code.
Obstacles: No real obstacles came up this week, but I've put an extreme amount of time into the project — partly because I find it fun, and partly to make sure I stay well ahead in the plan so I don't fall behind.
Next step: Almost all the features I had planned for the system at an MMP level are now available in a minimal version, but everything needs polishing and proper testing. So the focus this week will be on fine-tuning features and the code so everything works as close to flawlessly as possible. If I have time I'll also polish the frontend to make it more user-friendly and maybe add an admin interface to see metrics and so on.
Week 5 – More of the premium flow: email, Discord and metrics
Focus: This week I spent a lot of time making the "premium part" feel real. I built in daily email delivery of the report (opt-in) and started making the system more operable by adding Prometheus metrics for, among other things, auth, payments and the Monero RPC. I also kept building on the Discord part so that the report can actually be posted without the Discord API freaking out (length/truncation and so on).
Obstacles: What takes time here isn't writing an endpoint, but getting the whole chain stable: generate report → save → distribute → make sure the format is right in Discord and that the email is readable. It's a lot of testing and "small fixes" that you don't see until you run everything together.
Next step: Next week I want to continue with quality and security (rate limiting, harder config and so on) while also continuing to make the payment/premium flow more robust.
Week 6 – Sick week (low pace, but I still got to tinker a bit)
Focus: This week unfortunately didn't go as planned because I was ill, so the pace was really low. But I still managed to get in a few small things I think are important for making the system feel more "real". Among other things I simplified the JWT handling (claims) so it's less fiddly in the code, I added support for controlling the minimum number of confirmations for Monero via an env variable, and I also managed to improve the brute-force protection / rate limiting for login (and update the audit list so it was actually "checked off").
Obstacles: The illness was of course the big obstacle. I couldn't manage long sessions, so it was more "small fixes when I could" than driving big features forward.
Next step: Since I was ahead of plan before this happened, I could still adapt without the most important milestones having to move. Next week I'll go back to working more focused and getting the pace up again.
Week 7 – Admin panel, Discord invite + Stripe
Focus: This week I spent a lot of time making the premium flow and the whole thing feel more "real". I built an admin-panel flow with role-based access and metrics/KPIs (with polish like tooltips so it's understandable). I also got a real Discord invite flow working (a button/action in profile/settings + notification by email) so that premium can actually get access to the Discord channel in a controlled way. On top of that I managed to implement Stripe as an alternative payment (PaymentIntent + webhook handling) and made sure the service is built/pushed in CI/CD like the rest.
Obstacles: Here you notice that the "last 10%" takes time. It's not hard to make a button appear, but it takes time to get the whole chain stable and clear for the user (and to avoid weird edge cases in the UI).
Next step: Next week I want to focus on the final stretch: documentation and presentation material/final report, while doing the last operational polish so I can feel confident when I run the demo.
Week 8 – Final stretch: documentation/presentation + mainnet polish and final stabilisation
Focus: This week was more about landing the project than chasing new features. I updated and cleaned up documentation so it reflects how the system actually works now (Stripe, the code-quality flow and so on). I also worked on presentation material and a script, including reformatting it so it can be pasted into Canva without everything looking strange. On the system side I also spent time on operational adjustments around the Monero flow ahead of mainnet: adjusting config/amounts, fixing polling so it's based on a real expiration timeout instead of "X attempts", and adding a wallet refresh before pending payments are checked. That's exactly the kind of thing that makes the system feel genuinely stable.
Obstacles: The last week is always a bit chaotic because everything has to be finished at the same time (report, presentation, final fixes). I've tried to be strict with priorities so that what I show actually feels stable and not "works only on my machine".
Next step: Deliver the presentation and hand everything in, and then write down reflections on what went well and what I'd have done differently if I started the project over.