💡 What Inspired Me
The modern web is incredibly dynamic, which makes traditional web scraping a nightmare. Every time a site updates its CSS classes or DOM structure, hard-coded scrapers break. I was inspired to build NovaPress because I wanted to create an agent that "sees" and navigates the web exactly like a human does. Instead of writing brittle HTML parsers to fetch daily sports stats, I wanted to prove that visual AI models are finally capable of taking over the entire publishing pipeline—from raw data extraction to creative writing and final deployment.
⚙️ How I Built It
NovaPress is an autonomous, end-to-end publishing pipeline orchestrated through a custom Python desktop application.
- The UI: I built a dark-mode control panel using
customtkinter, which runs the agent in a background thread and streams terminal output directly into a polished UI log. - Visual Navigation: I utilized the Amazon Nova Act SDK (powered by the Nova 2 Sonic model). I give it a natural language prompt, and it autonomously launches a Playwright browser, navigates to
nba.com/stats, dismisses cookie banners, and visually extracts the daily leaderboard into a strict JSON schema. - Generative Journalism: Once the raw data is extracted, I pass it to Amazon Bedrock. Using the
amazon.nova-lite-v1:0model via the Converse API, the AI acts as a sports journalist, writing an entertaining summary paragraph and formatting the raw stats into clean HTML. - Autonomous Deployment: Finally, the Python script injects the AI-generated HTML into a local template and uses the
subprocessmodule to trigger the Netlify CLI, pushing the new website live to production.
When Nova 2 Sonic evaluates a web page to click or extract data, it conceptually calculates the probability of each visible UI element being the correct target. This can be modeled mathematically using a softmax function over the bounding boxes:
$$P(y_i \mid \mathbf{x}) = \frac{\exp(z_i)}{\sum_{j=1}^{K} \exp(z_j)}$$
Where $z_i$ represents the visual model's confidence logit for a given screen element. By highly optimizing my natural language extraction prompts, I maximized the confidence for the specific leaderboard tables, ensuring the agent never misclicked on advertisements or irrelevant sidebars.
🚧 Challenges I Faced
I ran into two major hurdles that required creative software engineering to solve:
- Invisible AWS Account Restrictions: During testing, I hit a silent
ValidationException: Operation not allowederror from Bedrock. Because new AWS accounts often restrict generative AI models to prevent bot abuse, my API calls were blocked. Instead of letting this crash the app, I built a resilient fallback system. My code uses atry/exceptblock to catch theAccessDeniedExceptionand instantly pivots to a locally cached content generator, ensuring the continuous deployment pipeline never fails in a production environment. - Terminal Animation vs. Desktop UI: The Nova Act SDK uses hidden ANSI color codes and carriage returns (
\r) to draw loading spinners in the terminal. When I piped this output to my CustomTkinter UI, it rendered as hundreds of lines of gibberish. I solved this by writing a customTextRedirectorclass with regex filters to strip ANSI escape sequences and ignore animation frames, resulting in a readable log output.
🧠 What I Learned
I learned that AI agents are officially ready for "Day 2" enterprise workflows. Building NovaPress taught me how to chain different specialized models together—using visual models for navigation and lightweight text models for creative generation. I also learned the importance of building graceful fallbacks when working with third-party cloud APIs, proving that robust error handling is just as important as the AI itself.
🚀 What's Next for NovaPress
While the current prototype proves that visual AI models can successfully manage an end-to-end publishing pipeline, this is just the beginning. I plan to evolve NovaPress into a consumer-ready desktop application.
My immediate roadmap includes:
- One-Click Installer: Currently, the setup requires terminal commands to install Python libraries, Playwright binaries, and the Netlify CLI. I plan to package NovaPress as a standalone executable. A seamless, one-click installer will handle all background dependencies, making the agent accessible to non-technical users.
- Dynamic Data Sources: I will update the CustomTkinter UI to allow users to input any target URL and define their own custom data extraction schemas. Instead of just sports stats, users could extract financial market data, local weather alerts, or tech news.
- Universal Publishing Integrations: I plan to expand deployment options beyond local Netlify directories. By adding support for generic webhooks and REST APIs, NovaPress will be able to publish directly to established platforms like WordPress, Ghost, Vercel, or any custom CMS backend.
- Autonomous Scheduling: I want to move NovaPress from a "click-to-run" model to a true "set-it-and-forget-it" background agent. By implementing a local task scheduler, users will be able to program the pipeline to automatically extract, write, and publish daily or hourly updates without ever opening the app.
- Custom AI Personas: Adding a configuration tab that lets users easily tweak the Amazon Bedrock system prompts, allowing them to instantly change the tone of their AI journalist from an energetic sports commentator to a formal financial analyst.
Built With
- amazon-bedrock
- amazon-nova-act
- amazon-nova-lite
- amazon-web-services
- boto3
- css3
- customtkinter
- html5
- netlify-cli
- node.js
- nova-2-sonic
- playwright
- python
Log in or sign up for Devpost to join the conversation.