Alcademy
Alcademy 是一個針對 IGIT 學生的生產級學術平台,將筆記、更新與資源集中於單一應用程式中。
- 星標
- 2
- 分支
- 3
- 最近推送(UTC)
- 2026年8月16日
- 專案狀態
- 未封存
原始 README
以下為英文專案原文快照,最新內容請造訪 GitHub。
Alcademy – Academic Platform for IGIT
Notes, notices, and student records for more than 2,000 students at IGIT Sarang.

Inside the app
Built with Flutter and used by more than 2,000 students, Alcademy brings college resources and everyday tools into a single dark interface.
| Area | Features |
|---|---|
| Academics | Branch and semester notes, syllabus, SGPA calculator, and a shared PDF viewer |
| Student records | ERP-backed results, timetable, attendance, fees, and holidays |
| Campus | College notices, amenities, academic documents, and notification history |
| Reading | Blogs, alumni success stories, and Beyond campus stories with daily news |
| Personal tools | Expense tracking and a local Private Space for notes and media |
| Profile | Saved ERP credentials and separate notice/general notification preferences |




System architecture
The app uses three distinct data paths:
- Student records: a WebView shares the ERP cookie session, signs in with locally saved credentials when needed, and extracts records for native Flutter screens. Scheduled jobs do not access student credentials.
- Shared content: repositories read notes and JSON feeds from GitHub. Source locations are centralized in
GitHubSources, while each feature handles its own parsing and cache policy. - Notifications and generated feeds: Python jobs run through GitHub Actions. They monitor notices, publish daily news and festival data, and use Firebase Cloud Messaging for notice delivery.
Feature code lives in lib/features/, with presentation, data, and model layers where needed. Shared networking, configuration, and storage live in lib/core/; reusable UI, theme, and PDF components live in lib/shared/.
Refresh and storage
Caches reduce repeated requests; they are not a replacement for the underlying college services. An uncached ERP record still requires a working connection and valid credentials.
| Data | Refresh policy |
|---|---|
| ERP attendance | Expires at the next 9:00 AM boundary in device local time |
| ERP timetable, results, fees, and holidays | Calendar-month cache; pull to refresh requests an update |
| Blogs and success stories | Calendar-month cache with a valid stale snapshot available offline |
| Daily news | Expires at the next 10:00 AM IST boundary |
| Festival calendar | Calendar-month cache; today's greeting is evaluated separately |
| PDF documents | Disk cache configured for 20 documents and a seven-day stale period |
ERP credentials use secure platform storage. Private Space files stay on the device and can be protected by biometric access; they are not an encrypted vault. Network images use the app's image caching components rather than being embedded in the news feed JSON.
Scheduled jobs
| Workflow | Schedule | Purpose |
|---|---|---|
notice-checker.yml |
Every ten minutes, offset from the hour | Detect new college notices and send a grouped notification |
daily-stories.yml |
Daily at 7:43 AM IST | Publish the daily news feed to the daily-stories branch |
festivals.yml |
First day of each month at 5:47 AM IST | Publish current- and next-year festival records to the festivals branch |
GitHub may delay scheduled runs. The notice checker keeps its state on the notification-state branch, has separate test and production audiences, and requires explicit repository configuration before scheduled production delivery. Firebase service-account credentials belong in repository secrets, never in app assets.
Setup and operational details: notice checker, daily stories, and festival calendar.
Repository layout
lib/
app/ App setup and routing
core/ Configuration, networking, and cache infrastructure
features/ Screens, repositories, parsers, and models
shared/ Theme, reusable widgets, and PDF viewer
content/ Notes, article feeds, settings, and content images
backend/ Scheduled Python jobs and their tests
assets/ Bundled images, fonts, and fallback data
test/ Dart unit, widget, and golden tests
third_party/ Vendored plugin compatibility patches
Blogs and success stories are single JSON feeds whose bodies retain Markdown formatting. To change content sources, edit lib/core/network/github_sources.dart. The content/Notes/ directory retains its existing branch and semester files.
Development
The project requires Flutter 3.47 or newer and Dart 3.12 or newer, as declared in pubspec.yaml. Android development also requires the Android SDK and a compatible JDK. iOS development requires macOS, Xcode, and CocoaPods.
git clone https://github.com/IamPritamAcharya/Alcademy.git
cd Alcademy
flutter pub get
flutter run
For a device subscribed to the test notice audience:
flutter run --dart-define=NOTICE_PUSH_TEST=true
Run static analysis and tests:
flutter analyze
flutter test
Release builds
Android APK:
flutter build apk --release --dart-define=NOTICE_PUSH_PRODUCTION=true
Google Play bundle:
flutter build appbundle --release --dart-define=NOTICE_PUSH_PRODUCTION=true
For iOS, install pods and open the Xcode workspace:
cd ios
pod install --repo-update
cd ..
open ios/Runner.xcworkspace
Select your Apple Developer team in Runner's signing settings. The Firebase iOS configuration must match com.alcademy.app; push delivery also requires an APNs key configured in Firebase. After signing and testing on an iPhone:
flutter build ipa --release --dart-define=NOTICE_PUSH_PRODUCTION=true
The production flag selects the notice topic subscription. It does not send notifications. Android is the established release target; the iOS configuration is prepared but still needs native build and device verification.
Contributions
Only resource contributions are currently open, including notes and study materials. Code contributions are not open. Notes contributor credits are maintained in the app's content settings.
分類
使用的依賴
依賴清單 41 項
- flutter
{"sdk":"flutter"} - cupertino_icons
^1.0.8 - flutter_markdown
^0.7.4+3 - url_launcher
^6.3.1 - html
^0.15.5 - pdfrx
^2.6.5 - flutter_cache_manager
^3.4.1 - crystal_navigation_bar
^1.0.2 - shared_preferences
^2.5.6 - shared_preferences_android
^2.4.24 - device_info_plus
^13.2.0 - sqflite_android
^2.4.4 - firebase_messaging
^16.7.0 - flutter_local_notifications
^18.0.1 - webview_flutter
^4.14.1 - webview_flutter_android
^4.12.1 - shimmer
^3.0.0 - fl_chart
^0.70.0 - flutter_slidable
^3.1.2 - firebase_analytics
^12.6.0 - dropdown_button2
^2.3.9 - auto_size_text
^3.0.0 - image_picker
^1.1.2 - path_provider
^2.0.11 - file_picker
^13.1.0 - youtube_player_flutter
^9.1.1 - share_plus
^13.3.1 - go_router
^14.8.1 - line_icons
^2.0.3 - connectivity_plus
^6.1.3 - flutter_spinkit
^5.2.1 - firebase_core
^4.15.0 - local_auth
^2.3.0 - flutter_secure_storage
^10.3.1 - http
^1.5.0 - video_player
any - cached_network_image
any - intl
any - path
any - flutter_test開發依賴
{"sdk":"flutter"} - flutter_lints開發依賴
^5.0.0
如何選擇適合專案的儲存庫?
先依使用情境篩選,再比較專案活躍情況,最後到原始儲存庫確認使用要求。
- 透過儲存庫名稱、作者或描述搜尋,再依技術分類縮小範圍。
- 綜合星標、分支與最近推送比較專案;星標反映社群關注,不保證品質。
- 使用前在 GitHub 確認 README、授權條款與 Issues。
來源與維護
“A repository is the most basic element of GitHub.”
GitHub Docs — About repositories ↗
