๐ A course and lecturer review platform designed specifically for Lingnan University students
Helping students make informed academic choices and share authentic learning experiences
๐ Get Started โข ๐ Documentation โข ๐ค Contributing โข ๐ Multi-language Support
LingUBible is live and serving Lingnan University students at:
Browse courses and lecturers, read and write reviews, and explore interactive grade distributions โ no installation required. Sign-up requires a valid Lingnan University email.
| Feature | Description | Status |
|---|---|---|
| ๐ Course Reviews | Detailed reviews covering workload, difficulty, grade and teaching, with helpful/unhelpful voting | โ |
| ๐จโ๐ซ Lecturer Reviews | Per-instructor ratings broken down by teaching session (lecture / tutorial) | โ |
| ๐ Interactive Grade Charts | Grade distribution as bar, stacked and box-plot views (ECharts), with cumulative line, GPA, and N/A toggle | โ |
| ๐ Past Exam Papers | Browse, sort and filter past papers by year and instructor, with multi-select batch ZIP download | โ |
| ๐ Course Syllabus | View the latest course syllabus directly from the course page | โ |
| โญ Favorites | Save favourite courses and instructors for quick access | โ |
| ๐ Smart Search | Fast course and lecturer search, including instructor nickname matching | โ |
| ๐๏ธ Faculty & Department Badges | Multi-department support for courses and instructors | โ |
| ๐ Student Verification | Lingnan email verification, Google OAuth, and reCAPTCHA protection | โ |
| ๐ Multi-language Support | English, Traditional Chinese, and Simplified Chinese | โ |
| ๐ Personal Statistics | Personal dashboard with your review history and votes received | โ |
| ๐ฑ PWA & Responsive | Installable progressive web app that adapts to every screen size | โ |
| ๐ Theme Toggle | Seamless switching between dark and light themes | โ |
| Category | Technology | Version | Purpose |
|---|---|---|---|
| ๐จ Frontend | React | 18.3.1 | UI Framework |
| TypeScript | 5.5.3 | Type Safety | |
| Vite | 7.0.0 | Build Tool | |
| Tailwind CSS | 3.4.17 | Styling | |
| shadcn/ui ยท Radix UI | Latest | UI Components | |
| ECharts | 5.6.0 | Data Visualization & Charts | |
| React Router | 6.26.2 | Routing | |
| TanStack Query | 5.56.2 | Data Fetching & Caching | |
| Zod | 3.23.8 | Schema Validation | |
| ๐ง Backend | Appwrite | 19.0.0 | BaaS (Auth, TablesDB, Storage, Functions) |
| Resend | - | Transactional Email | |
| Google reCAPTCHA v3 | - | Bot Protection | |
| ๐ฆ Tools | Bun | Latest | Package Manager & Runtime |
| ESLint | Latest | Code Linting | |
| PostCSS | Latest | CSS Processing | |
| Custom i18n | - | Internationalization |
graph TD
subgraph "๐จ Frontend Stack"
A[React 18.3.1]
B[TypeScript 5.5.3]
C[Vite 7.0.0]
D[Tailwind CSS]
E[shadcn/ui]
end
subgraph "๐ง Backend Services"
F[Appwrite 19.0.0]
G[Resend Email]
H[Auth & TablesDB]
end
subgraph "๐ฆ Development Tools"
I[ESLint]
J[PostCSS]
K[i18n]
end
style A fill:#61dafb
style B fill:#3178c6
style C fill:#646cff
style D fill:#06b6d4
style E fill:#000000
style F fill:#fd366e
style G fill:#ea4335
style H fill:#4285f4
style I fill:#4b32c3
style J fill:#dd3a0a
style K fill:#009688
graph TD
A[๐ lingubible] --> B[๐ src]
A --> C[๐ docs]
A --> D[๐ ๏ธ tools]
A --> E[๐ public]
A --> F[โ๏ธ functions]
B --> B1[๐งฉ components]
B --> B2[๐ pages]
B --> B3[๐ง services]
B --> B4[๐ฃ hooks]
B --> B5[๐ ๏ธ utils]
B --> B6[๐ types]
B1 --> B1A[auth]
B1 --> B1B[layout]
B1 --> B1C[user]
B1 --> B1D[common]
B1 --> B1E[features]
B1 --> B1F[ui]
B2 --> B2A[auth]
B2 --> B2B[user]
B2 --> B2D[legal]
style A fill:#e1f5fe
style B fill:#f3e5f5
style C fill:#e8f5e8
style D fill:#fff3e0
style E fill:#fce4ec
style F fill:#f1f8e9
| Directory | Purpose | Key Components |
|---|---|---|
| ๐ src/ | Source code | Main application code |
| โโโ ๐งฉ components/ | React components | UI building blocks |
| โโโ ๐ pages/ | Page components | Route-level components |
| โโโ ๐ง services/ | API services | External service integrations |
| โโโ ๐ฃ hooks/ | Custom Hooks | Reusable React logic |
| โโโ ๐ ๏ธ utils/ | Utility functions | Helper functions and constants |
| โโโ ๐ types/ | TypeScript types | Type definitions |
| ๐ docs/ | Documentation | Project documentation |
| ๐ ๏ธ tools/ | Development tools | Build scripts and utilities |
| ๐ public/ | Static assets | Images, icons, manifest |
| โ๏ธ functions/ | Cloud functions | Serverless functions |
LingUBible is tuned to stay fast and responsive on Appwrite's infrastructure.
- ๐งฉ Code splitting โ vendor, UI, charts and locale code are split into separate chunks so the initial payload stays lean and rarely-used code loads on demand.
- ๐๏ธ Passive multi-layer caching โ in-memory +
localStoragewrite-through TTL caches back the heavy aggregate reads (teaching records, term/language stats), serving repeat visits instantly without any background polling. - ๐ค Font subsetting โ the LXGW WenKai CJK font is subset at build time to ship only the glyphs actually used.
- ๐ Lazy-loaded locales โ each language bundle is dynamically imported only when selected.
- โก Bun + Vite 7 โ fast installs, near-instant dev startup, and snappy hot module replacement.
- Node.js: >= 20.19.0 (Required for Vite 7)
- bun: >= 1.0.0 (Fast JavaScript runtime & package manager)
- Git: Latest version
We've migrated from npm to Bun for enhanced development experience:
- ๐ Lightning Fast: Up to 25x faster than npm for package installation
- ๐ง All-in-One: Runtime, bundler, test runner, and package manager
- ๐ฆ Drop-in Replacement: Compatible with npm packages and scripts
- ๐ก๏ธ Built-in Security: Automatic lockfile verification
- ๐พ Efficient Caching: Smart dependency caching reduces install times
We've upgraded to Vite 7 for cutting-edge development performance:
- โก Enhanced Performance: Improved build speeds and optimizations
- ๐ฏ Modern Browser Support: Chrome 107+, Firefox 104+, Safari 16.0+
- ๐ง Better Tree Shaking: More efficient bundle optimization
- ๐ฆ Improved HMR: Faster hot module replacement
- ๐ ๏ธ Enhanced Plugin System: Better plugin compatibility and performance
- ๐จ Advanced CSS Features: Improved CSS processing and optimization
# 1๏ธโฃ Clone the project
git clone https://github.com/ansonlo-dev/LingUBible.git
cd LingUBible
# 2๏ธโฃ Install dependencies
bun install
# Fast and reliable package manager
# 3๏ธโฃ Environment setup
cp env.example .env.local
# 4๏ธโฃ Start development server
bun run dev
# Lightning fast development experience๐ Click to view detailed configuration steps
-
Copy environment variable template
cp env.example .env.local
-
Configure the required environment variables
# Frontend (Appwrite client) VITE_APPWRITE_ENDPOINT=your_appwrite_endpoint VITE_APPWRITE_PROJECT_ID=your_project_id # Frontend (Google reCAPTCHA v3 โ public site key) VITE_RECAPTCHA_SITE_KEY=your_recaptcha_site_key # Dev mode: allow any email to register (NEVER enable in production) VITE_DEV_MODE=false # Server-side / cloud functions (keep secret) APPWRITE_API_KEY=your_appwrite_api_key RESEND_API_KEY=your_resend_api_key RECAPTCHA_SECRET_KEY=your_recaptcha_secret_key
-
Refer to the detailed setup guides
# ๐ Development
bun run dev # Start dev server on :8080 (--host enabled)
bun run build # Production build (output: dist/)
bun run build:fast # Production build, skipping font subsetting
bun run preview # Preview the production build
# ๐ Code Quality
bun run lint # ESLint
bun run refactor:check # Build + sanity check ("did I break it?")
# โ๏ธ Backend
bun run deploy:functions # Deploy Appwrite cloud functions
# ๐ค Fonts & Tooling
bun run fonts:rebuild # Re-subset the LXGW WenKai font
bun run project:structure # Print the src/ treeDeployment: the frontend auto-deploys to Appwrite Sites via the Appwrite โ GitHub integration โ pushing to
maintriggers a build. Cloud functions deploy separately withbun run deploy:functions.
| Language | README | Documentation | Status |
|---|---|---|---|
| English | README.md | Documentation | โ Complete |
| ็น้ซไธญๆ | README.md | ๆๆช | โ Complete |
| ็ฎไฝไธญๆ | README.md | ๆๆกฃ | โ Complete |
| Category | Content | Link |
|---|---|---|
| ๐ง Setup Guide | Environment variables, dev mode, email verification, reCAPTCHA | ๐ Setup |
| โก Feature Documentation | Avatar system, multilingual implementation, email templates, security | ๐ Features |
| ๐ Deployment Guide | Appwrite Sites Git deployment | ๐ Deployment |
| ๐ ๏ธ Development Documentation | Project structure, Bun-only setup, functions analysis | ๐ Development |
We welcome all forms of contributions, whether it's code, documentation, design, or idea sharing.
- ๐ด Fork the project
- ๐ฟ Create feature branch (
git checkout -b feature/AmazingFeature) - ๐พ Commit changes (
git commit -m 'Add some AmazingFeature') - ๐ค Push to branch (
git push origin feature/AmazingFeature) - ๐ Create Pull Request
- ๐ Bug Fixes - Help us fix issues
- โจ New Features - Add useful new functionality
- ๐ Documentation Improvements - Enhance project documentation
- ๐จ UI/UX Improvements - Improve user experience
- ๐ Translations - Support more languages
- ๐งช Testing - Increase test coverage
If you find LingUBible helpful for your academic journey, consider donating to support development. Your donation helps:
- ๐ Add New Features - Continuously improve the platform
- ๐ Fix Bugs & Issues - Maintain a stable experience
- ๐ Expand Language Support - Reach more students
- ๐ฑ Improve Performance - Optimize for better user experience
- ๐จ Enhance UI/UX - Create a more beautiful interface
Every contribution, no matter how small, makes a difference! ๐
Prefer crypto? Any of these works. Donations go towards the running costs โ servers, database and domain.
| Coin | Network | Address |
|---|---|---|
| BTC Bitcoin | Bitcoin | bc1qj02ac5ev682x53fplwl3428p5r69mzagsjz4lk |
| ETH Ethereum | Ethereum | 0x0357d369d45Effe1D3eD7b8aD12C2ecCe3F8184d |
| USDT Tether | Ethereum ยท ERC20 | 0x0357d369d45Effe1D3eD7b8aD12C2ecCe3F8184d |
| USDT Tether | Tron ยท TRC20 | THCM3Wjjwd6ReUathuKnyfjaDcvUwSJWUC |
| SOL Solana | Solana | 9sA9FgqtGfpKZmBv2SSTvfAWkxHgqrMkXSeA1NNKsi5y |
| TRX Tron | Tron | THCM3Wjjwd6ReUathuKnyfjaDcvUwSJWUC |
| GRAM Gram | TON | UQCXzRzkqkXXkzq_pUm54dLPrdPW8CRG-KlVzjSubG0unyuD |
| BNB | BNB Smart Chain ยท Ethereum | 0x5a6A922F36707ba558Eaf0c14B6cc8B0a2728f03 |
| DOGE Dogecoin | Dogecoin | DPmDppqWZ34UqJktXvHLauXQuuWrteL4C5 |
| XRP | XRP Ledger | rKQidLa6dUX7ucYgHUimtwe9vwLMWvNCEK |
| LTC Litecoin | Litecoin | ltc1qfrfa9fgqyr89d5d9ee5cr3sptcmkwl94z00tfj |
| ZEC Zcash | Zcash ยท transparent | t1Rve5CMcqfBb2yaFDzRTVF9nBTwKPNaRY3 |
Note ยท ETH and USDT (ERC20) share one EVM address, and TRX and USDT (TRC20) share one Tron address โ that is expected, a single account receives both. The Zcash address is a transparent (t-addr) one, so shielded transfers are not supported.
- โญ Star this repository - Help others discover LingUBible
- ๐ Report bugs - Help us improve the platform
- ๐ก Suggest features - Share your ideas with us
- ๐ Contribute code - Join our development team
- ๐ Spread the word - Tell your friends about LingUBible
๐ LingUBible's success is inseparable from the following support:
| Category | Thanks to |
|---|---|
| ๐ ๏ธ Technical Support | React, TypeScript, Vite 7, Tailwind CSS, Appwrite and other open source projects |
| ๐จ Design Inspiration | shadcn/ui, Radix UI, Lucide Icons and other design systems |
| ๐ Community Support | GitHub, Stack Overflow, Reddit and other developer communities |
| ๐ User Feedback | Valuable opinions and suggestions from Lingnan University student community |
| โค๏ธ Development Team | Hard work of all contributors and maintainers |
This project adheres to the open source spirit and is committed to:
- ๐ Knowledge Sharing - Share technical experience and best practices
- ๐ค Community Collaboration - Welcome everyone to participate and contribute
- ๐ Continuous Improvement - Continuously optimize and improve functionality
- ๐ Serving Society - Contribute to education
๐ MIT License
This project is licensed under the MIT License
Copyright (c) 2026 LingUBible
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
โญ If this project helps you, please give us a Star!
๐ Related Links
๐ Official Website โข ๐ง Contact Us โข ๐ฌ Discussions โข ๐ Issue Reports
This website has no official affiliation with Lingnan University. All reviews and opinions are personal views of users and do not represent the position of Lingnan University.
Built with โค๏ธ by ansonlo.dev | Powered by Open Source