2.8 KiB
2.8 KiB
name, description, metadata
| name | description | metadata | ||||||
|---|---|---|---|---|---|---|---|---|
| project-daiting | Daiting dating app frontend — Vue 3, Vite, Tauri v2, pnpm. Full scaffold built, actively iterated. |
|
Vue 3 (Composition API + <script setup>) + Vite 6 + Tauri v2 + pnpm dating app called Daiting.
Why: User provided a comprehensive master prompt specifying full stack, aesthetic direction, and all features.
How to apply: Full scaffold is complete and builds. Implementation is actively iterated — check git log for latest state rather than relying on this snapshot.
Stack
- Frontend: Vue 3, Vite 6, TypeScript, SCSS + Tailwind v4, pnpm
- Desktop shell: Tauri v2 (Rust)
- API client: auto-generated typed client at
src/api/api.ts— always use its types, never invent local interfaces for API data (see feedback-api-types) - State: composables (
useAuth,useChat,useUi,useFeed, etc.) — stores were migrated to composables - Router:
src/router/index.tswith guards and silent token refresh on navigation
Auth
- Access token kept in-memory only
- Refresh token in localStorage
activeProfileonuseAuth()is the currently selected profile (one user can have many)
API conventions
apiClient.api.*— all requests go through here- HTTP client unwraps
.dataautomatically — methods return the DTO directly, not{ data: DTO } - Generated types:
MatchDto,ProfileResponseDto,ChatDto,LikeDto,MessageDto, etc. — all insrc/api/api.ts - If a DTO is missing a needed field, ask user to add it on the backend and regenerate — never patch it locally
Key design decisions
- Aesthetic: dark base
#0d0d0d, cream#f0ebe0, signal#c45c3a, Instrument Serif + DM Mono - All UI text in Russian; brand name English
- Chat polling at 2s interval (comment marks WebSocket replacement point)
- Avatar =
profile.media[0]?.path(first media item), not a dedicatedavatarUrlfield - Age is computed from
profile.birthDate(string"YYYY-MM-DD") — noagefield in DTO
Views & components (scaffold complete)
- Feed:
FeedCard(GSAP drag-to-swipe),FeedCardStack,FeedFilters,FeedView - Matches:
MatchesView— fetchesMatchDto[], enriches each withprofilesControllerFindOnefor partner profile - Chat:
ChatsListView,ChatRoomView - Profile:
MyProfileView,ProfileDetailView,ProfileEditor,MediaGallery - Auth:
LoginView,RegisterView,ProfileSetupView(4-step wizard) - Other:
DatesView,ReportsView(admin) - Layout:
AppShell,SideNav,BottomNav,TauriTitlebar - Common:
AppButton,AppInput,AppModal,AppDrawer,AppToast,LoadingSpinner,EmptyState
Build status
pnpm exec vite build → ✓ (last verified early in project)
Dev server on port 1420