A self-hosted language learning platform for learning Spanish, built with Vue.js and FastAPI.
π Visit our Landing Page | π€ Contribute
The landing page is hosted at the root of this repo and deploys automatically to Vercel!
-
5 Complete Lessons covering:
- Basic Greetings
- Numbers 1-20
- Common Foods
- Colors
- Family Members
-
Interactive Learning:
- Vocabulary cards with text and audio pronunciations (click π to hear!)
- Practice quizzes with instant feedback
- Score tracking for each lesson
- Text-to-speech pronunciation using Web Speech API
-
User System:
- User registration and authentication
- Progress tracking (coming soon)
-
Fully Dockerized: Easy deployment with Docker Compose
- Docker
- Docker Compose
- Clone the repository:
git clone https://github.com/thelonewolf39/Language-Learning-web.git
cd Language-Learning-web- Start the application:
docker-compose up -d-
Access the application:
- Frontend: http://localhost:3000
- Backend API: http://localhost:8000
- API Docs: http://localhost:8000/docs
-
Stop the application:
docker-compose downIf you make changes to the code:
docker-compose up -d --build- Navigate to backend directory:
cd backend- Create virtual environment:
python -m venv venv
source venv/bin/activate # On Windows: venv\Scripts\activate- Install dependencies:
pip install -r requirements.txt- Run the server:
uvicorn app.main:app --reload --host 127.0.0.1 --port 8000- Navigate to frontend directory:
cd frontend- Install dependencies:
npm install- Run development server:
npm run dev- Build for production:
npm run buildLanguage-Learning-web/
βββ backend/
β βββ app/
β β βββ main.py # FastAPI application
β β βββ models.py # Database models
β β βββ schemas.py # Pydantic schemas
β β βββ crud.py # Database operations
β β βββ lessons.json # Lesson content
β βββ data/
β β βββ users.db # SQLite database
β βββ Dockerfile
β βββ requirements.txt
β βββ .dockerignore
βββ frontend/
β βββ src/
β β βββ components/
β β β βββ MainPage.vue # Main landing page
β β β βββ LessonCard.vue # Lesson preview card
β β β βββ LessonView.vue # Interactive lesson view
β β βββ App.vue
β β βββ main.js
β βββ Dockerfile
β βββ nginx.conf
β βββ package.json
β βββ .dockerignore
βββ docker-compose.yml
POST /api/v1/users/register- Register new userGET /api/v1/lessons- Get all available lessons
- FastAPI - Modern Python web framework
- SQLAlchemy - SQL toolkit and ORM
- Passlib with Argon2 - Password hashing
- SQLite - Database
- Vue 3 - Progressive JavaScript framework
- Vite - Fast build tool
- Axios - HTTP client
- Tailwind CSS - Utility-first CSS
- Docker - Containerization
- Docker Compose - Multi-container orchestration
- Nginx - Web server for frontend
DATABASE_URL- Database connection string (default: sqlite:///./data/users.db)
VITE_API_URL- Backend API URL (default: http://127.0.0.1:8000)
Each lesson includes:
- Title & Description - Overview of the lesson
- Difficulty Level - Beginner, intermediate, or advanced
- Vocabulary - Spanish words with English translations and pronunciations
- Exercises - Multiple-choice quizzes to test knowledge
The project includes a beautiful landing page at the root (index.html) that explains the project and welcomes contributors.
-
Via Vercel Dashboard:
- Go to vercel.com
- Import your GitHub repository
- Deploy with default settings
- Done! Your landing page is live
-
Via Vercel CLI:
npm install -g vercel vercel
-
Automatic Deployment:
- Connect your GitHub repo to Vercel
- Every push to main deploys automatically
The landing page includes:
- Project overview and features
- Complete setup instructions
- Tech stack details
- Contribution guidelines
- User authentication with JWT tokens
- Progress tracking for completed lessons
- Spaced repetition algorithm for vocabulary review
-
Audio pronunciationsβ Completed! (Click π on vocabulary cards) - More advanced lessons (intermediate and advanced levels)
- Writing exercises
- Conversation practice scenarios
- Leaderboard and achievements
- Record user pronunciation and compare with native speech
We welcome contributions from developers, designers, and language experts!
Ways to contribute:
- Add more lessons and vocabulary
- Implement new features
- Improve UI/UX design
- Fix bugs and improve performance
- Write documentation
- Translate to other languages
How to start:
- Fork the repository
- Create a feature branch
- Make your changes
- Test thoroughly
- Submit a pull request
Check out our landing page for more details on contributing!
This project is for educational purposes.