smooth-app
전 세계 식품의 성분·영양·정보를 자유롭게 협업하고 공개하는 데이터베이스
아직 감지된 업데이트가 없습니다. GitHub 릴리스가 나오면 여기에 보입니다.
개인 계정의 공개 저장소 소유자는 GitHub로 로그인해 운영자를 확인하고 소개를 직접 관리할 수 있습니다. 관리자 승인은 필요하지 않습니다.
로그인한 뒤 확인 파일을 만들어 이 저장소의 기본 브랜치에 30분 안에 커밋해 주세요. 다른 브랜치나 포크의 파일은 인정하지 않습니다. 파일을 올린 뒤 아래에서 확인하면 관리자 승인 없이 관리할 수 있습니다. 자격을 유지하려면 파일을 남겨 두세요.
로그인이 필요하면 로그인 화면으로 이동합니다. 로그인 후 이곳으로 돌아와 원하는 확인 버튼을 다시 눌러 주세요.
프로젝트 폴더에서 /nomorevibe verify를 실행하면 소유권을 확인하고 소개를 직접 관리할 수 있습니다.
1분 만에 확인하기README 전체를 불러오는 중입니다. 아래는 저장된 발췌입니다.
A gym-themed fitness tracking web application with real-time data sync, Keycloak authentication, and a bold dark-mode UI.README 전문 보기 ↗A gym-themed fitness tracking web application with real-time data sync, Keycloak authentication, and a bold dark-mode UI.
| Layer | Technology | Description |
|---|---|---|
| Angular 19 | Standalone Components, Signals, zoneless-ready | |
| TypeScript 5.7 | Strict mode, type-safe throughout | |
| Tailwind CSS 4.3 | Dark theme, CSS-native @theme tokens | |
| Firebase 12 | Firestore real-time sync, onSnapshot subscriptions | |
| Keycloak 26 | OpenID Connect, PKCE S256, SSO-ready | |
| Vercel | Static SPA deployment, build-time env injection |
onSnapshot keeps data live across devices#f97316), green accent (#22c55e), OLED-friendlynpm install
cd docker
docker compose up -d
Keycloak will be available at http://localhost:8080
http://localhost:8080/admin (admin / admin)[email protected] / testpass123Update src/environments/environment.ts with your Firebase project credentials:
firebase: {
apiKey: 'YOUR_API_KEY',
authDomain: 'YOUR_PROJECT.firebaseapp.com',
projectId: 'YOUR_PROJECT_ID',
storageBucket: 'YOUR_PROJECT.firebasestorage.app',
messagingSenderId: 'YOUR_SENDER_ID',
appId: 'YOUR_APP_ID'
}
ng serve
Open http://localhost:4200
src/app/
core/
guards/ - Route protection (auth, admin)
interceptors/ - HTTP interceptors (bearer token)
models/ - TypeScript interfaces (Workout, User)
services/ - AuthService, FirestoreService, WorkoutService
shared/
components/ - Navbar, Footer, LoadingSpinner
pipes/ - Custom pipes
features/
admin/ - Admin panel (user management, stats)
dashboard/ - User dashboard (workout summary)
landing/ - Public landing page (hero, features, pricing)
membership/ - Membership plans & upgrade
profile/ - User profile settings
schedule/ - Weekly workout calendar
workouts/ - Workout CRUD
workout-create/ - Create/edit workout form
workout-detail/ - Single workout view
workout-list/ - All workouts list
Set these environment variables in Vercel project settings:
| Variable | Description |
|---|---|
KEYCLOAK_URL | Keycloak URL with /auth suffix if needed |
KEYCLOAK_REALM | Realm name |
KEYCLOAK_CLIENT_ID | Client ID |
FIREBASE_API_KEY | Firebase API key |
FIREBASE_AUTH_DOMAIN | Firebase auth domain |
FIREBASE_PROJECT_ID | Firebase project ID |
FIREBASE_STORAGE_BUCKET | Firebase storage bucket |
FIREBASE_MESSAGING_SENDER_ID | Firebase messaging sender ID |
FIREBASE_APP_ID | Firebase app ID |
CLOUDINARY_CLOUD_NAME | Cloudinary cloud name (for exercise image uploads) |
CLOUDINARY_UPLOAD_PRESET | Cloudinary unsigned upload preset name |
The build command npm run build:vercel runs scripts/set-env.js to inject these into the production environment at build time.
Note: Cloud-IAM uses the
/authpath prefix — setKEYCLOAK_URLtohttps://<instance>.cloud-iam.com/auth
Exercise image uploads use Cloudinary's free tier (25GB storage + 25GB bandwidth/month, no card required) instead of Firebase Storage, since Firebase Storage now requires the paid Blaze plan. Uploads go directly from the browser to Cloudinary via an "unsigned upload preset" — no backend or secret key needed.
src/environments/environment.ts under cloudinary: { cloudName, uploadPreset }.CLOUDINARY_CLOUD_NAME and CLOUDINARY_UPLOAD_PRESET in Vercel project settings (same place as the FIREBASE_* vars above).Both values are safe to embed in client code — an unsigned preset never exposes your Cloudinary API secret.
For production, you need a Keycloak server accessible via HTTPS.
Managed Keycloak-as-a-Service — no Docker, no server management, always online:
https://<your-instance>.cloud-iam.com/auth.KEYCLOAK_URL in Vercel to your Cloud-IAM URL (with /auth)| Option | Notes |
|---|---|
| Railway.app | Free trial credit, Docker support |
| Fly.io | Free tier VM with Docker |
| Render.com | Free tier (512MB RAM, cold starts) |
| Any VPS | Docker + quay.io/keycloak/keycloak:26.0 |
| Phase Two | Managed Keycloak with extensions (free tier) |
https://your-domain.vercel.app/*https://your-domain.vercel.app