Baseball Roster
Randomized baseball lineup generator with smart priority assignment
About Baseball Roster
Baseball Roster is a web-based lineup generator designed for coaches and fantasy players who need to quickly assemble randomized, priority-aware lineups. Whether you're drafting for a single game or preparing a multi-inning tournament, the algorithm handles the math so you can focus on strategy.
Enter your roster of players, select your field type (standard or extended), choose how many innings you need, and click Generate. The algorithm respects position priorities and randomizes fairly—every run produces a different, balanced lineup.
Key Features
Smart Priority Assignment
Players are ranked by priority and the algorithm ensures top talent fills premium positions without clustering.
Multi-Inning Support
Generate lineups for one game or entire tournaments. Each inning is independently randomized while respecting priorities.
Flexible Field Configs
Standard nine-player field or extended with extra outfielders and bench spots.
Print-Ready Layouts
Clean, print-friendly roster cards with a single click. No ads, no sign-ups.
Session Persistence
Save multiple roster sessions in your browser. Come back anytime to regenerate or review.
Privacy-First
Everything runs in your browser. No tracking, no data collection, no accounts required.
Why Baseball Roster?
Perfect For
Coaches
Quick lineup generation for game day or tournaments
League Organizers
Tournament brackets with multi-inning support
Family Leagues
Fun randomized lineups for pickup games
Fantasy Players
Random team generation for casual play
How This App Was Made
This app was built entirely locally using OpenCode and the Qwen 3.6 model — no Claude, no external LLMs, no paid API calls. Every line of code, every fix, every clarification was handled by the Qwen model running locally.
This is the first application built end-to-end and deployed entirely using local models — from initial scaffolding through debugging, CI/CD pipeline setup, Helm chart configuration, and live production deployment. Previous attempts required bringing in Claude to rescue when things went off track.
While OpenCode and Qwen code are roughly half the speed of Claude, and the back-and-forth requires more clarifying iterations, for a free experience the trade-off is compelling: fully local, fully private, and entirely under your control.
Technical Setup
Two parallel llama.cpp instances running on two dedicated graphics cards — a supervisor/coder architecture inspired by multi-agent systems, but running entirely on local hardware.
Supervisor — Qwen3.6-35B-A3B-UD-IQ3_S.gguf, 200k context window, ~95 tokens/second. Acts as the project supervisor: plans tasks, delegates to the coder, reviews code, manages context compaction, and keeps the project vision coherent across sessions.
Coder — gemma-4-26B-A4B-it-MXFP4_MOE.gguf, 128k context window, ~125 tokens/second. Receives specific task instructions from the supervisor and focuses exclusively on implementation without the overhead of project-level context.
The supervisor can hand off specific tasks to the coder, saving on context window usage and enabling parallel work. Task handoffs keep each model's context lean and focused.
Context compaction was needed only twice during the entire project — a remarkable result for a multi-day coding session spanning hundreds of interactions.
Why this matters: Claude and similar cloud models are hitting practical limits — rising costs, service outages, rate limits, and an inherent risk of depending on external infrastructure for development work that should remain private. Running locally with open-weight models means your code, your context, your control.
Technical Details
- —Runs entirely in the browser via a single-page app
- —Go backend serves static assets and handles roster generation
- —Self-hostable via Docker for league privacy
- —Deployed at demo.carefuldream.com/baseball-roster/
Have a project like this one?
We'd be glad to talk through your goals, your constraints, and whether we're the right team for the work.
