LanguageGo is a full-stack language learning and scoring platform with a Java backend and a Node.js frontend.
It provides REST APIs for tracking scores, updating user metadata, and persisting structured data in Firebase.
The frontend communicates with the backend to provide a responsive learning experience.
- Demo
- Features
- Tech Stack
- Prerequisites
- Project Structure
- Installation & Setup
- Configuration
- Running the Project
- API Documentation
- Testing
- Deployment
- Contributing
- License
Click to play the demo!
- RESTful backend in Java (Maven-managed).
- Handlers for:
- Storing and retrieving scores
- Updating tags/labels
- Firebase integration for persistent storage.
- JSON and GeoJSON parsing utilities.
- Node.js frontend (npm-based).
- Configurable via environment variables.
- Backend: Java 17+, Maven
- Frontend: Node.js 18+
- Database: Firebase (Firestore/Realtime DB depending on configuration)
- Build Tools: Maven, npm
- Version Control: Git + GitHub
Ensure you have the following installed:
- Java 17+
- Maven 3.8+
- Node.js 18+ & npm
- Firebase Project (Service Account credentials JSON file)
LanguageGo/
├── package.json # Frontend dependencies
├── package-lock.json
├── server/
│ ├── pom.xml # Maven configuration
│ ├── run # Script to start backend
│ ├── TODO.md # Development notes
│ ├── config/ # Style configs
│ └── src/main/java/edu/brown/cs/student/main/server/
│ ├── Server.java # Main server entry point
│ ├── Handlers/ # API request handlers
│ │ ├── GetScoreHandler.java
│ │ ├── StoreScoreHandler.java
│ │ ├── UpdateTagHandler.java
│ │ └── Utils.java
│ └── storage/ # Storage utilities
│ ├── StorageInterface.java
│ ├── FirebaseUtilities.java
│ ├── JSONParser.java
│ └── GeoJsonObject.java
cd server
mvn clean install
./runThis builds the backend and launches the server (default port: 8080).
npm install
npm startThis starts the frontend on http://localhost:3000 (by default).
The backend requires Firebase credentials and runtime configurations.
Create a .env file in the server/ directory with:
FIREBASE_PROJECT_ID=your-project-id
FIREBASE_CLIENT_EMAIL=your-service-account@your-project.iam.gserviceaccount.com
FIREBASE_PRIVATE_KEY="-----BEGIN PRIVATE KEY-----\nABC...\n-----END PRIVATE KEY-----\n"
SERVER_PORT=8080For the frontend, environment variables can be placed in .env at the project root:
REACT_APP_API_BASE_URL=http://localhost:8080Backend:
cd server
./runFrontend:
npm startThe app should now be running with:
- Frontend → http://localhost:3000
- Backend API → http://localhost:8080
Retrieve the current score.
Response:
{
"userId": "abc123",
"score": 42
}Store or update a user score.
Request:
{
"userId": "abc123",
"score": 50
}Response:
{ "status": "success" }Update a user tag.
Request:
{
"userId": "abc123",
"tag": "grammar"
}Response:
{ "status": "updated" }cd server
mvn testnpm test⋆⭒˚.⋆⋆⭒˚.⋆⋆⭒˚.⋆⋆⭒˚.⋆⋆⭒˚.⋆⋆⭒˚.⋆⋆⭒˚.⋆ Made with <3 ⋆⭒˚.⋆⋆⭒˚.⋆⋆⭒˚.⋆⋆⭒˚.⋆⋆⭒˚.⋆⋆⭒˚.⋆⋆⭒˚.⋆
