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.

Java Baker
Java Baker
Java Baker
How AI Coding Assistants Built a Full‑Stack Free‑Games Site in One Weekend

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.

JavaAI programmingfull-stackJamstackCloudflareKiroOpenCode
Java Baker
Written by

Java Baker

Java architect and Raspberry Pi enthusiast, dedicated to writing high-quality technical articles; the same name is used across major platforms.

0 followers
Reader feedback

How this landed with the community

Sign in to like

Rate this article

Was this worth your time?

Sign in to rate
Discussion

0 Comments

Thoughtful readers leave field notes, pushback, and hard-won operational detail here.