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.