Skip to Content
Taeho Kim

Local Quest

A tourism quest app that rewards walking to less crowded places

Built for 2026 Tourism Data Contest (web/app track)Korea Tourism Organization × Sungkyunkwan University AI-Centered University Program · 2026.07 – 2026.09

Period
2026.08 – 2026.09
Type
Team project
Team
3 people
Role
Project lead, frontend developer, and designer
Status
Completed
Deployment
LiveONE store

LibrariesKakao Login, Google Sign-In

Summary

An Android app that turns nearby places from the Korea Tourism Organization’s location-based tourism data into quests and awards EXP and badges when users verify their arrival by GPS. It applies higher EXP multipliers to less crowded places, first visits to a region, and weekday-morning visits. Our team built it for the web/app track of the 2026 Tourism Data Contest and released it on ONE store.

What I Did

  • Designed the “Parchment & Seal” v1.0 design system and every screen of the app
  • Rebuilt the login, onboarding, home and other screens on shared design tokens and widgets
  • Built the badge collection, badge detail, profile and settings screens
  • Implemented the quest progress map showing the destination, verification radius, current position and heading on Kakao Maps
  • Built the verification screen for collection quests that require several photos
  • Wrote a tool that draws the map markers for 7 quest types across 5 difficulty tiers in code
  • Implemented the app’s API client with automatic token refresh and separate handling of network loss and session expiry
  • Wrote layout tests that check screens for overflow at three screen sizes and with enlarged text
  • Configured the Android release build and carried out the ONE store release
  • Wrote the contest submission documents and captured the demo screenshots

Screens

Map covered with quest markers by typeView full size (new tab)
Phone screen Map covered with quest markers by type
Quest card marked ‘quiet · 700 EXP’View full size (new tab)
Phone screen Quest card marked ‘quiet · 700 EXP’
Progress screen with the verification radius circle and ‘You’ve arrived’View full size (new tab)
Phone screen Progress screen with the verification radius circle and ‘You’ve arrived’
Verification screen confirming the location (8 m error, 100 m max)View full size (new tab)
Phone screen Verification screen confirming the location (8 m error, 100 m max)
Reward screen: base 110 × crowding 1.4 × off-peak 1.2 × streak 1.05 = +194 EXPView full size (new tab)
Phone screen Reward screen: base 110 × crowding 1.4 × off-peak 1.2 × streak 1.05 = +194 EXP
Badge collection (1/13, region and type filters)View full size (new tab)
Phone screen Badge collection (1/13, region and type filters)

Key Features

Nearby tourism quests
Turns nearby places from the Korea Tourism Organization’s TourAPI into visit, photo, collection or note quests.
GPS arrival verification
The server checks the verification radius, GPS accuracy and per-type conditions, and prevents the same request from being processed twice.
Per-place verification types
Besides arrival-only visits, quests can require a photo, a set of photos, a quiz answer or a one-line note.
EXP multipliers
EXP multipliers change with a crowding score computed from recent in-app check-ins, first visits to a region, weekday mornings and activity streaks.
Quest map
Shows quests in the visible Kakao Maps area with markers by type and difficulty, and displays the user’s heading from device sensors.
Badge collection
Users collect 13 badges (one of them hidden) and can pick up to 3 as featured badges.
Offline verification queue
Keeps verifications that failed because of the network on the device and sends them when the app reopens or the user retries.

Tech Stack

Language

Dart
The Flutter app’s code

Mobile

Flutter
The Android app and its screens
Kakao Maps API
Quest-map markers by type and difficulty; destination, verification radius, current position and heading on the progress screen

Data

TourAPI
Fetches nearby places from location-based tourism data (locationBasedList2) to create quests

Libraries and Tools Also Used

Mobile

Kakao Login
Sign-in with a Kakao account
Google Sign-In
Sign-in with a Google account

Other projects using the same technologyGUDORYDayce

Architecture

The Flutter Android app calls an Express REST API; the server stores data in PostgreSQL through Prisma and creates quests from nearby places fetched from the Korea Tourism Organization’s TourAPI. The app uploads verification photos directly to AWS S3 with presigned URLs, and push notifications are sent through Firebase Cloud Messaging.

Problems & Solutions

  1. Problem

    Kakao login could not receive its callback in release builds

    Solution

    Injected the callback scheme into the manifest from the app key in the build settings

  2. Problem

    Losing the network logged users out

    Solution

    Separated connection failures from session expiry and added an offline notice with a retry button

  3. Problem

    Screens overflowed on small phones and with enlarged text

    Solution

    Added tests covering three screen sizes and 1.3x text, then fixed the overflowing layouts

  4. Problem

    The quest progress screen showed a decorative drawing instead of a map

    Solution

    Replaced it with Kakao Maps showing the destination, verification radius, current position and heading

Outcomes

  • Released on ONE store (2026-09-18, v1.0.0)
  • Submitted to the web/app track of the 2026 Tourism Data Contest; first-round results pending (as of 2026-10)

Learnings

  • Releasing an app on ONE store for the first time, I found and fixed problems that only appear in release builds, such as the login callback, signing key and cleartext traffic settings.