Tattoo
A modern reimplementation of TAT — the course helper app for Taipei Tech students
Help us translate! We use Crowdin to manage localizations. Join the project and help us bring Tattoo to your language!
What is this?
Project Tattoo is a work-in-progress Flutter app that helps Taipei Tech (NTUT) students access their course schedules and academic information. This is a ground-up reimplementation with a focus on:
- Modern, maintainable code — Clean architecture and best practices
- Developer-friendly — Easy for future club members to understand and contribute
- Concise implementation — No unnecessary complexity
Getting Started
This project uses mise to manage development tools (Flutter, Java, Ruby).
# Install and activate mise (if not already)
# See: https://mise.jdx.dev/getting-started.html
# Install Flutter, Java, and Ruby
mise install
# Install Flutter dependencies
flutter pub get
# Install Ruby dependencies (fastlane)
bundle install
# Fetch credentials (Firebase configs, keystores)
# Requires a properly configured .env file
dart run tool/credentials.dart fetch
# Run the app
flutter run
Firebase & Credentials
This project uses a private Git repository to manage sensitive credentials (signing keys, service accounts, and Firebase configuration files).
- Request Access: Contact the maintainers for access to the
tattoo-credentialsrepository. - Configure
.env: Copy.env.exampleto.envand fill in theMATCH_GIT_URLandMATCH_PASSWORD. - Fetch Configs: Run
dart run tool/credentials.dart fetch. This will decrypt and place files likegoogle-services.jsonandkeystore.jksin their respective directories.
Firebase Setup (Maintainers only)
If you need to reconfigure Firebase:
- Install the Firebase CLI.
- Install the FlutterFire CLI.
- Run
flutterfire configureto updatelib/firebase_options.dart. - Encrypt and push new config files using
dart run tool/credentials.dart encrypt <file> <path_in_repo>.
Local Development
Android SDK: Install Android Studio or let Flutter download SDK components automatically on first build.
VS Code users: See .vscode/README.md for project-specific setup instructions.
Contributors: See CONTRIBUTING.md for commit and branch guidelines.
Project Context
Check AGENTS.md to see detailed architecture notes, implementation status, and future plans.
This project exists alongside two other implementations:
- NEO-TAT/tat_flutter — The original TAT app
- NTUT-NPC/tat2_flutter (QAQ) — A feature-rich alternative with offline mode, smart session management, and advanced UI
Project Tattoo aims to take lessons learned from both and create a clean, maintainable foundation for future development.
License
Copyright (C) 2026 NTUT Programming Club (NTUT-NPC)
This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.
See LICENSE for details.
Libraries
- components/app_skeleton
- components/chip_tab_switcher
- components/notices
- components/option_entry_tile
- components/section_header
- components/widget_preview_frame
- database/actions
- database/database
- database/schema
- Database schema definitions for Tattoo.
- database/views
- firebase_options
- i18n/strings.g
- Generated file. Do not edit.
- i18n/strings_en_US.g
- Generated file. Do not edit.
- main
- models/contributor
- models/course
- models/ranking
- models/score
- models/user
- repositories/auth_repository
- repositories/course_repository
- repositories/preferences_repository
- router/app_router
- screens/main/course_table/course_table_providers
- screens/main/course_table/course_table_screen
- screens/main/home_screen
- screens/main/profile/about_screen
- screens/main/profile/profile_card
- screens/main/profile/profile_danger_zone
- screens/main/profile/profile_providers
- screens/main/profile/profile_screen
- screens/main/score/score_screen
- screens/welcome/intro_screen
- screens/welcome/login_screen
- services/course_service
- services/firebase_service
- services/github_service
- services/i_school_plus_service
- services/portal_service
- services/student_query_service
- shells/animated_shell_container
- shells/showcase_shell
- utils/avatar_payload
- utils/fetch_with_ttl
- utils/http
- utils/launch_url
- utils/localized