How AI Coding Assistants Built a Full‑Stack Free‑Games Site in One Weekend
During a holiday break the author used AI programming assistants Kiro and OpenCode to create a complete Java‑backed, Jamstack‑based full‑stack application that scrapes Epic Games' free‑game listings, generates static JSON/HTML pages, and deploys automatically to Cloudflare Pages, demonstrating AI‑driven development efficiency.
Overview
A full‑stack Java project was generated with AI programming assistants (Kiro and OpenCode). The system periodically retrieves the Epic Games free‑game catalog, stores the data in a MySQL database, and generates static JSON and HTML files that are deployed to Cloudflare Pages.
Architecture and Workflow
The solution follows a Jamstack pattern:
Backend service runs on a local machine (PC or Raspberry Pi). It calls the Epic Games REST API, parses the response, saves game details to MySQL, and writes pre‑rendered static files to a local directory.
A cron job checks the Git repository for changes; when new static files appear it commits and pushes them to GitHub.
GitHub Actions automatically build and publish the site to Cloudflare Pages, providing a free pages.dev sub‑domain.
Main Crawling Workflow (Java)
@Transactional
public CrawlerResult crawlEpicGames() {
log.info("Starting Epic Games crawl task");
CrawlerTask task = new CrawlerTask();
task.setStartTime(LocalDateTime.now());
task.setStatus(CrawlerTask.TaskStatus.RUNNING);
task.setGamesCrawled(0);
logCrawlerTask(task);
CrawlerResult result = new CrawlerResult();
try {
// 1. Fetch data from Epic API
String jsonResponse = epicCrawler.fetchFreeGames();
// 2. Parse JSON response
List<Game> games = parseEpicResponse(jsonResponse);
result.setTotalFetched(games.size());
log.info("Parsed {} games from Epic API", games.size());
// 3. Save games to database (deduplication handled inside)
int savedCount = gameService.batchSaveGames(games);
result.setNewGames(savedCount);
result.setUpdatedGames(0);
// 4. Generate static files for CDN deployment
if (result.getTotalFetched() > 0) {
log.info("Generating static files after successful crawl");
boolean staticGenerated = staticPageService.generateStaticFiles();
if (staticGenerated) {
log.info("Static files generated successfully");
} else {
log.warn("Failed to generate static files");
}
}
// 5. Log task execution
task.setEndTime(LocalDateTime.now());
task.setStatus(CrawlerTask.TaskStatus.SUCCESS);
task.setGamesCrawled(result.getTotalFetched());
task.setNewGames(result.getNewGames());
log.info("Crawl task completed: {} saved, {} new, {} errors",
savedCount, result.getNewGames(), result.getErrors().size());
} catch (Exception e) {
String errorMsg = "Crawl task failed: " + e.getMessage();
log.error(errorMsg, e);
result.addError(errorMsg);
task.setEndTime(LocalDateTime.now());
task.setStatus(CrawlerTask.TaskStatus.FAILED);
task.setErrorMessage(errorMsg);
}
logCrawlerTask(task);
return result;
}AI Programming Assistants Compared
Kiro
Supports two coding modes: a spec‑driven mode that generates requirement, design, and task documents, and a “vibe” mode for rapid iteration.
Can read the entire project context, modify specific files or lines on demand, and perform iterative development (code generation, API integration, bug fixing, refactoring, deployment instructions).
Built‑in utilities: file search, read/write, command execution, and extensibility (e.g., connecting to an MCP server for Postman calls).
Model selection is automatic but can be forced to Claude, DeepSeek, etc.
Free tier provides 500 tokens in the first month and 50 tokens per month thereafter.
OpenCode
Open‑source AI assistant with CLI and desktop versions (website: https://opencode.ai).
Focuses on “vibe” coding, offering a lightweight alternative for quick demos.
Vendor‑neutral and community‑maintained.
Free quota is limited and tied to promotional model releases.
Practical Development Steps
Define functional requirements and technology stack; the assistant asks clarification questions if needed.
Generate the project skeleton, then open it in IntelliJ IDEA, adjust configuration files, connect to a local MySQL instance, and run the application.
Iteratively fix bugs and refactor code (e.g., eliminate duplicate counts, add localization, abstract static‑file generation).
Extract reusable prompt templates that capture the Java Web + frontend skill set for future projects.
Further Possibilities
Run the AI assistants continuously on a home server (e.g., Raspberry Pi) with tunneling; enable autopilot mode so new requirements can be applied automatically.
Compliance tip: avoid sending proprietary code or sensitive data to external AI services; use the assistants only for generating isolated snippets.
Java Baker
Java architect and Raspberry Pi enthusiast, dedicated to writing high-quality technical articles; the same name is used across major platforms.
How this landed with the community
Was this worth your time?
0 Comments
Thoughtful readers leave field notes, pushback, and hard-won operational detail here.
