_이 글은 Hacktoberfest Open-Source AI Challenge Week 1: Touch Grass에 제출하는 내용입니다.
제가 만든 것
대부분의 AI 앱은 더 많은 화면 시간을 원합니다. 저는 그 반대를 원하는 것을 만들었습니다.
JobiGo는 하나의 간단한 아이디어를 중심으로 구축된 오픈 소스 AI 축구 코치입니다:
화면은 경험에서 가장 짧은 부분이 되어야 한다.
이 앱은 옆에 코치가 필요하지 않은, 개인 맞춤형 훈련 세션을 원하는 축구 선수들을 위해 설계되었습니다.
경험 흐름은 다음과 같습니다:
계획(PLAN) → 외부 활동(GO OUTSIDE) → 플레이(PLAY) → 복귀(RETURN) → 보고(REPORT) → 개선(IMPROVE)
사용자는 다음을 선택하며 시작합니다:
- 훈련 시간
- 축구 레벨
- 훈련 목표
- 사용 가능한 장비
- 경기 환경
JobiGo는 Gemma 3 4B를 사용하여 구조화된 축구 미션을 생성합니다.
제 테스트 세션에서는 워밍업, 콘 위브(cone weave), 피겨 8 드릴(figure-8 drill), 스피드 드리블, 도전 과제, 쿨다운, 성공 지표 및 안전 가이드가 포함된 45분짜리 중급 콘 드리블 챌린지를 생성했습니다.
그리고 가장 중요한 부분이 나옵니다:
휴대폰을 내려놓고. 플레이하러 나가라.
이 앱은 의도적으로 방해 요소를 제거하고 선수에게 화면에서 벗어나 세션을 완료하도록 지시합니다.
선수가 돌아오면, 실제로 무슨 일이 일어났는지 보고합니다:
- 시도 횟수(Attempts)
- 성공한 시도 횟수(Successful attempts)
- 골(Goals)
- 완료된 드릴 수(Drills completed)
- 난이도(Difficulty)
- 참고 사항(Notes)
Gemma는 이 세션을 검토하고 다음을 생성합니다:
- 성능 요약(Performance summary)
- 가장 강한 영역(Strongest area)
- 개선할 한 가지(One thing to improve)
- 다음 세션 추천 사항(A recommendation for the next session)
다음 세션은 단순히 무작위 운동을 생성하는 것이 아니라 이전의 성과를 기반으로 합니다.
제 테스트 세션에서는 15번의 시도, 7번의 성공적인 시도, 2골, 그리고 3개의 완료된 드릴을 기록했습니다. Gemma는 선수의 강점과 개선할 영역을 파악한 후, 그 성과를 기반으로 또 다른 드리블 중심의 세션을 추천했습니다.
따라서 JobiGo는 축구에 대해 이야기하는 AI 챗봇이 아닙니다.
AI를 사용하여 액션을 생성하고, 플레이어의 길을 비켜준 다음, 그 액션 이후에 플레이어가 개선할 수 있도록 도움을 줍니다.
데모
🎥 영상 데모
개인화된 축구 미션 생성부터 Gemma 기반 세션 검토 및 다음 세션 추천을 받는 전체 JobiGo 워크스루를 시청하세요.
저는 미션 생성부터 Gemma 기반 세션 성찰(reflection) 및 다음 세션 추천까지의 흐름을 보여주는 완전한 JobiGo 워크스루를 녹화했습니다.
데모는 다음 내용을 다룹니다:
미션 설정 → Gemma가 생성한 미션 → 휴대폰 내려놓기 (PHONE DOWN) → 플레이하기 (GO PLAY) → 세션 리포트 → Gemma 성찰(reflection) → 다음 세션 추천.
녹화된 데모는 이 제출물에 첨부되어 있습니다.
🌐 라이브 데모
JobiGo 라이브 데모 — Render
공개 애플리케이션은 Render에 배포되었습니다.
본 프로젝트에 사용된 검증된 Gemma 추론(inference) 흐름은 Ollama를 통해 로컬에서 Gemma 3 4B로 실행됩니다.
코드
💻 GitHub 저장소
JobiGo — GitHub 저장소
저장소에는 FastAPI 백엔드, 프론트엔드, AI 제공자 계층(AI provider layer), 세션 저장소, 유효성 검사 및 테스트를 포함한 전체 애플리케이션이 담겨 있습니다.
구축 방법 (How I Built It)
JobiGo의 핵심은 Ollama를 통해 로컬에서 실행되는 Gemma 3 4B입니다.
주요 아키텍처는 다음과 같습니다:
프론트엔드 → FastAPI → AI 제공자 → Ollama → Gemma 3 4B
Gemma는 경험의 세 가지 중요한 부분에 책임이 있습니다.
1. 개인화된 미션 생성
플레이어의 지속 시간, 레벨, 목표, 장비 및 환경이 Gemma에게 제공됩니다.
Gemma는 비정형적인 채팅봇 응답 대신 구조화된 축구 미션을 생성합니다.
출력은 Pydantic을 사용하여 검증되며, 생성된 미션이 애플리케이션의 예상 구조를 따르도록 유효성 검사 및 수정 처리가 이루어집니다.
2. 세션 검토
플레이어가 미션을 완료한 후, 실제 결과가 애플리케이션으로 다시 제출됩니다.
Gemma는 이러한 결과를 분석하여 다음과 같은 내용이 포함된 성과 반성 보고서를 생성합니다:
- 성과 요약 (Performance summary)
- 가장 강한 영역 (Strongest area)
- 개선할 영역 (Area to improve)
- 실행 가능한 권장 사항 (Actionable recommendation)
3. 다음 세션 진행 (Next-Session Progression)
이전 세션은 진행 루프의 일부가 됩니다.
매번 처음부터 시작하는 대신, JobiGo는 이전 성과를 활용하여 플레이어가 다음에 집중해야 할 부분을 추천합니다.
제가 테스트한 세션에서 Gemma는 콘 위브(cone weave) 및 피겨 8(figure-8) 드릴 중 좋은 볼 컨트롤을 식별하는 동시에, 과제 완수와 원하는 성공 지표 도달에 어려움이 있음을 파악했습니다.
그 후 해당 영역들을 강화하는 데 초점을 맞춘 45분짜리 드리블 세션을 추천했습니다.
기술 (Technology)
JobiGo는 다음 기술 스택을 사용합니다:
- Gemma 3 4B — 오픈 웨이트 AI 모델
- Ollama — 로컬 추론(local inference)
- FastAPI — 백엔드 (backend)
- Pydantic — 구조화된 출력 검증 (structured output validation)
- SQLite — 세션 기록 (session history)
- HTML/CSS/JavaScript — 프론트엔드 (frontend)
- Render — 배포 (deployment)
최종 테스트 스위트는 51/51 테스트를 통과했습니다.
AI 레이어는 또한 제공자 추상화(provider abstractions) 뒤에 분리되어 있어, 핵심 애플리케이션을 재작성할 필요 없이 다양한 추론 제공자(inference providers)를 통합할 수 있습니다.
오픈 혁신이 중요한 이유 (Why Does Open Innovation Matter?)
JobiGo에게 오픈 혁신은 제가 단순히 블랙박스 API가 아니라 실제로 구축할 수 있는 AI 레이어를 원했기 때문에 중요했습니다.
Gemma와 같은 오픈 웨이트 모델을 사용함으로써, 저는 Ollama를 통해 핵심 AI 경험을 로컬에서 실행하고 다음 사항들을 제어할 수 있습니다:
- 모델 (The model)
- 프롬프트 (The prompts)
- 구조화된 출력 (Structured output)
- 검증 (Validation)
- 추론 환경 (The inference environment)
- 애플리케이션 데이터가 시스템을 통과하는 방식
이는 개인 훈련 기록 및 성과와 관련된 애플리케이션에 특히 유용합니다.
로컬 추론 경로는 검증된 핵심 경험이 플레이어의 세션 데이터를 제3자 AI API로 전송할 필요가 없다는 것을 의미합니다.
또한 실험을 훨씬 쉽게 만듭니다. 프롬프트, 검증 규칙 및 애플리케이션 로직을 변경하고 모델이 어떻게 동작하는지 즉시 테스트할 수 있습니다.
저에게 있어 그것은 open AI의 가장 흥미로운 점 중 하나입니다:
모델이 단순히 요청을 보내는 대상이 아니라, 함께 구축하고 실험해 볼 수 있는 무언가가 된다는 것입니다.
그리고 JobiGo는 그 개방성을 약간 다른 목적으로 사용합니다:
AI를 사용하여 사람들을 화면에서 벗어나게 하는 것입니다.
수상 부문 (Prize Categories)
🏆 종합 (Overall)
JobiGo는 AI를 활용하여 신체 활동을 장려하고 의도적으로 스크린 사용 시간을 최소화함으로써 **'풀밭에 나가기(Touch Grass)'**라는 주제를 직접 다룹니다.
이 제품의 핵심 루프는 화면에서 벗어나는 것을 의도적으로 중심으로 설계되었습니다:
계획 (PLAN) → 야외 활동 (GO OUTSIDE) → 놀이 (PLAY) → 복귀 (RETURN) → 보고 (REPORT) → 개선 (IMPROVE)
🧠 Gemma 활용 최우수 (Best Use of Gemma)
Gemma 3 4B는 애플리케이션의 중심입니다.
이는 다음 기능을 구동합니다:
- 개인화된 축구 미션 생성
- 체계적인 훈련 계획
- 세션 성과 분석
- 다음 세션 추천
이 제품은 단순히 기존 애플리케이션에 AI 챗봇을 추가하는 것이 아니라, 모델 자체를 중심으로 구축되었습니다.
☁️ Render 활용 최우수 (Best Use of Render)
JobiGo는 공용으로 접근 가능한 웹 애플리케이션으로 Render에 배포되어 있습니다.
Render 배포는 공개적인 웹 경험을 제공하며, 이 프로젝트에 사용된 검증된 Gemma 추론 흐름은 Ollama를 통해 로컬에서 실행됩니다.
나의 에이전트 세션 (My Agent Session)
JobiGo는 AI 지원 코딩 워크플로우를 사용하여 개발되었습니다. 개발 과정에는 구현, 디버깅, 테스트, 문서화 및 반복적인 개선을 돕기 위해 AI 코딩 에이전트를 사용하는 것이 포함되었습니다.
이 섹션은 선택 사항이므로 DevRelay 에이전트 세션은 포함되지 않았습니다.
마지막 생각 (Final Thought)
JobiGo의 목표는 사용자를 앱 안에 가두는 것이 아닙니다.
휴대폰을 내려놓을 이유를 제공하는 것입니다.
대부분의 AI 제품은 얼마나 오랫동안 사용자가 화면에 몰입할 수 있는지를 기준으로 성공을 측정합니다.
JobiGo는 다르게 성공을 측정합니다.
유용한 훈련 세션을 생성하는 데 몇 분이 걸리고, 그 후 누군가를 밖에 내보내 다음 30~45분 동안 활동하게 한다면, AI는 제 역할을 다한 것입니다.
계획 (PLAN).
밖에 나가라.
놀아라.
돌아와라.
보고하라.
개선하라 (IMPROVE).
그러고 다시 하세요.
팀 (Team)
이 프로젝트는 다음 분들에 의해 제작되었습니다: