2.4 KiB
2.4 KiB
Ticky Project - Development Guide
Project Overview
Self-hosted TikTok-style infinite video scroller with Python/FastAPI backend and vanilla JavaScript frontend. Runs in Docker Compose.
Key Features
- Infinite scroll with lazy loading
- Mobile swipe navigation (up/down)
- Desktop keyboard and mouse wheel support
- Responsive design (mobile/desktop)
- Automatic video preloading
- REST API for random video selection
Architecture
Backend (Python/FastAPI)
- Port: 3001
- Framework: FastAPI + Uvicorn
- Key File:
backend/main.py - Features:
- Random video selection from folder
- Static file serving for videos
- CORS enabled for frontend access
Frontend (Vanilla JS)
- Port: 3000
- File:
frontend/app.jswithstyles.css - Features:
- Swipe gesture detection
- Keyboard/mouse wheel navigation
- Lazy loading and preloading
- Responsive CSS for mobile/desktop
Common Tasks
Add a new backend endpoint
- Open
backend/main.py - Add
@app.get()or@app.post()decorator - Implement endpoint logic
- Restart backend:
docker-compose restart backend
Customize frontend styling
- Edit
frontend/styles.css - Modify colors, sizes, animations
- Changes reflect immediately on page refresh
Change video directory
- Update
docker-compose.ymlVIDEOS_DIRvariable - Or mount different volume path
- Restart containers:
docker-compose restart
Add video metadata
- Modify backend response in
main.py(add duration, thumbnail URL, etc.) - Update frontend
renderVideo()inapp.jsto display new fields
Debugging
View backend logs
docker-compose logs -f backend
View frontend console
Open browser DevTools (F12) → Console tab
Check running containers
docker-compose ps
Rebuild images
docker-compose down && docker-compose up --build
Performance Considerations
- Videos should be optimized (compressed MP4s recommended)
- Use landscape orientation videos for best desktop experience
- Preloading limited to next video to save bandwidth
- Only current ± 1 videos rendered in DOM
Browser Support
- Chrome/Edge: Full support
- Firefox: Full support
- Safari: Full support (iOS 12.2+)
- Mobile browsers: Optimized for touch
Future Enhancement Ideas
- Video filtering/search
- User ratings or favorites
- Thumbnail previews
- Video duration display
- Playlist management
- Authentication
- CDN integration