Loading repository data…
Loading repository data…
Dangtruong-DUT / repository
A personal project replicating TikTok's core features, built with Nextjs(frontend) and NodeJS + TypeScript + ExpressJS (backend) to practice full-stack development. Tiktok clone 2025
A transparent discovery signal based on current public GitHub metadata.
This score does not audit code, security, maintainers, documentation quality, or suitability. Verify the repository and its current documentation before adoption.
A personal project replicating TikTok's core features, built with Next.js (frontend) and Laravel 12 (backend API) to practice full-stack development.
Author: Nguyen Dang Truong
Live Demo: taplamit.tech
This repository currently runs as a monorepo with:
backend-nginx) serves the Laravel API via php-fpmfrontend-nginx) proxies all requests to Next.js (frontend)worker)Default local URLs with Docker:
http://localhost:9697http://localhost:9696/apihttp://localhost:9000http://localhost:9001http://localhost:1080The repository now separates environment variables into 4 layers:
.env: Docker Compose infrastructure variables only (ports, container names, postgres container credentials, selected env file paths)backend/.env: Laravel application variables onlyfrontend/.env: Next.js application variables onlyai/.env: AI moderation service and AI scripts variables onlyYou can switch service env files independently by editing root .env:
BACKEND_ENV_FILE=./backend/.envFRONTEND_ENV_FILE=./frontend/.envAI_ENV_FILE=./ai/.envCopy-Item .env.example .env
Copy-Item backend/.env.example backend/.env
Copy-Item frontend/.env.example frontend/.env
Copy-Item ai/.env.example ai/.env
docker compose -f compose.dev.yaml up --build -d
This also starts a dedicated queue worker container (worker).
docker compose -f compose.dev.yaml exec workspace composer install
docker compose -f compose.dev.yaml exec workspace php artisan migrate
The repository includes a dedicated worker service so you don't need to run php artisan queue:work manually.
Development:
supervisord and loads config from .docker/development/backend/worker/supervisord.conf (mounted).docker compose -f compose.dev.yaml logs -f workerdocker compose -f compose.dev.yaml restart workerProduction:
supervisord with /etc/supervisord.conf baked into the image from .docker/production/backend/worker/supervisord.conf.docker compose -f compose.prod.yaml up -d --build workerIf you need a different env profile (for example staging/production-like), update these variables in root .env before running compose:
NEXT_APP_ENVBACKEND_ENV_FILEFRONTEND_ENV_FILEAI_ENV_FILERoot .env (copy from .env.example) contains infrastructure variables for both services:
MINIO_PORTMINIO_PORT_CONSOLEMINIO_ROOT_USERMINIO_ROOT_PASSWORDMAILCATCHER_WEB_PORTMAILCATCHER_SMTP_PORTEnvironment behavior:
compose.dev.yaml): MinIO and MailCatcher run by default.compose.prod.yaml): MinIO runs by default, MailCatcher is optional and attached to profile tools.Start MailCatcher in production-like stack only when required:
docker compose -f compose.prod.yaml --profile tools up -d mailcatcher
Recommended Docker-based backend mail/storage values in backend/.env:
MAIL_MAILER=smtp
MAIL_HOST=mailcatcher
MAIL_PORT=1025
AWS_ACCESS_KEY_ID=minio_root_user
AWS_SECRET_ACCESS_KEY=minio_root_password
AWS_ENDPOINT=http://minio:9000
AWS_USE_PATH_STYLE_ENDPOINT=true