Skip to content

james719-code/CRESTV2

Repository files navigation

CREST

Compiled Research as an Educational Application for Students and Teachers

Android 24+ Kotlin 2.0 Jetpack Compose Material 3 Firebase Auth and Firestore Appwrite Storage Macrobenchmark

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.

Highlights

  • 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

Architecture

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.

Tech Stack

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

Requirements

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

Getting Started

  1. Clone the repository.
git clone https://github.com/james719-code/CRESTV2.git
cd CRESTV2
  1. Open the project in Android Studio.

  2. Add Firebase configuration.

Place google-services.json in app/. Enable Firebase Authentication and Cloud Firestore in the Firebase project.

  1. 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
  1. Sync Gradle and run the app.
./gradlew assembleDebug

Windows:

gradlew.bat assembleDebug

Quality Gates

Run these before opening a pull request:

./gradlew testDebugUnitTest
./gradlew connectedDebugAndroidTest
./gradlew :benchmark:connectedBenchmarkAndroidTest

Notes:

  • connectedDebugAndroidTest requires a connected device or emulator.
  • Macrobenchmarks should run on a physical device when possible.
  • Release builds require signing environment variables. See docs/RELEASE.md.

Configuration

Firebase

The app expects a Firebase Android client for package com.bdbshs.crest. Keep the real google-services.json out of version control.

Appwrite

Appwrite values are resolved in this order:

  1. local.properties
  2. Gradle properties passed with -P
  3. Build defaults in app/build.gradle.kts

Release Signing

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

Repository Hygiene

  • 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.

Project Status

CREST is maintained for a real school deployment. The codebase is public-facing, but the production Firebase, Appwrite, and signing assets are intentionally private.

Maintainer

James Ryan S. Gallego

About

Kotlin + Jetpack Compose research e-library app with Google Sign-In, student/teacher roles, PDF uploads, approval workflow, Firebase, and Appwrite.

Topics

Resources

Contributing

Security policy

Stars

Watchers

Forks

Contributors

Languages