CREST is an Android e-library for Bonifacio D. Borebor Sr. High School. It gives students and teachers a central place to upload, approve, search, read, and preserve research papers and school documents.
The app is built as a production-style Android project: Kotlin, Jetpack Compose, Material 3, MVVM, Hilt, Firebase Authentication, Cloud Firestore, Appwrite Storage, unit tests, instrumented UI tests, and macrobenchmarks.
- Google Sign-In with student and teacher roles
- Teacher approval workflow for student research uploads
- PDF upload, metadata capture, storage, and in-app viewing
- Research search, filtering, sorting, favorites, and detail views
- Student group management for collaborative submissions
- Teacher account and storage management screens
- Dependency injection with Hilt and repository-backed ViewModels
- Unit, instrumented, and macrobenchmark test modules
CREST follows a single-activity Compose architecture with MVVM and repository boundaries.
app/
src/main/java/com/bdbshs/crest/
data/ Firebase, Appwrite, DataStore, cache, repositories
di/ Hilt modules
domain/ Use cases for reusable business flows
navigation/ Compose NavHost and routes
ui/ Compose screens, components, theme, ViewModels
utils/ Shared utility types
benchmark/ Macrobenchmark test module
gradle/ Version catalog and wrapper
For more detail, see docs/ARCHITECTURE.md.
| Area | Technology |
|---|---|
| Language | Kotlin 2.0 |
| UI | Jetpack Compose, Material 3 |
| Architecture | MVVM, repositories, use cases |
| Dependency injection | Hilt |
| Auth | Firebase Authentication with Google Sign-In |
| Database | Cloud Firestore |
| File storage | Appwrite Storage |
| Local storage | DataStore Preferences, local file cache |
| Testing | JUnit 4, MockK, Turbine, Espresso, Compose UI tests |
| Performance | Android Macrobenchmark |
| Build | Gradle Kotlin DSL, version catalog |
| Tool | Version |
|---|---|
| Android Studio | Ladybug 2024.2.1 or newer |
| JDK | 17 recommended |
| Android Gradle Plugin | 8.10.1 |
| Min SDK | 24 |
| Compile SDK | 35 for app, 36 for benchmark |
- Clone the repository.
git clone https://github.com/james719-code/CRESTV2.git
cd CRESTV2-
Open the project in Android Studio.
-
Add Firebase configuration.
Place google-services.json in app/. Enable Firebase Authentication and Cloud Firestore in the Firebase project.
- Add Appwrite configuration.
Create or update local.properties:
APPWRITE_ENDPOINT=https://fra.cloud.appwrite.io/v1
APPWRITE_PROJECT_ID=your_project_id
APPWRITE_BUCKET_ID=your_bucket_id- Sync Gradle and run the app.
./gradlew assembleDebugWindows:
gradlew.bat assembleDebugRun these before opening a pull request:
./gradlew testDebugUnitTest
./gradlew connectedDebugAndroidTest
./gradlew :benchmark:connectedBenchmarkAndroidTestNotes:
connectedDebugAndroidTestrequires a connected device or emulator.- Macrobenchmarks should run on a physical device when possible.
- Release builds require signing environment variables. See docs/RELEASE.md.
The app expects a Firebase Android client for package com.bdbshs.crest. Keep the real google-services.json out of version control.
Appwrite values are resolved in this order:
local.properties- Gradle properties passed with
-P - Build defaults in
app/build.gradle.kts
Release builds read signing values from environment variables:
| Variable | Description |
|---|---|
RELEASE_STORE_FILE |
Path to the keystore file |
RELEASE_STORE_PASSWORD |
Keystore password |
RELEASE_KEY_ALIAS |
Signing key alias |
RELEASE_KEY_PASSWORD |
Signing key password |
- IDE state, build outputs, generated logs, local configs, signing keys, and Firebase files are ignored.
- Public docs live in
docs/. - Contribution expectations live in CONTRIBUTING.md.
- Security reporting instructions live in SECURITY.md.
- Release process lives in docs/RELEASE.md.
CREST is maintained for a real school deployment. The codebase is public-facing, but the production Firebase, Appwrite, and signing assets are intentionally private.
James Ryan S. Gallego