chore: remove vibe-coding artifacts from tracking, sync notes and obsidian config
- Untrack .claude/launch.json (Claude Code config) - Add .claude/, .mcp.json, CLAUDE.md, and AI-generated CSVs to .gitignore - Add _notes/ vault (architecture, API, tasks, bugs, infra docs) - Add .obsidian/ plugin/vault config (workspace state excluded) - Sync CHANGELOG.md
This commit is contained in:
@@ -1,11 +0,0 @@
|
|||||||
{
|
|
||||||
"version": "0.0.1",
|
|
||||||
"configurations": [
|
|
||||||
{
|
|
||||||
"name": "flutter-web",
|
|
||||||
"runtimeExecutable": "flutter",
|
|
||||||
"runtimeArgs": ["run", "-d", "chrome", "--web-port", "8080", "--web-browser-flag", "--disable-web-security"],
|
|
||||||
"port": 8080
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
17
.gitignore
vendored
17
.gitignore
vendored
@@ -52,3 +52,20 @@ web/assets/login-bg.mp4
|
|||||||
*.keystore
|
*.keystore
|
||||||
# large binary assets — keep local only, not tracked in git
|
# large binary assets — keep local only, not tracked in git
|
||||||
assets/login-bg.mp4
|
assets/login-bg.mp4
|
||||||
|
|
||||||
|
# Obsidian — exclude personal workspace state, keep plugin/vault config
|
||||||
|
.obsidian/workspace.json
|
||||||
|
.obsidian/workspace-mobile.json
|
||||||
|
.obsidian/cache
|
||||||
|
|
||||||
|
# Claude Code / MCP / vibe-coding tool artifacts
|
||||||
|
.claude/
|
||||||
|
.mcp.json
|
||||||
|
CLAUDE.md
|
||||||
|
hero_section_improvements.csv
|
||||||
|
security_audit_report.csv
|
||||||
|
feature_gap_analysis.csv
|
||||||
|
|
||||||
|
# Obsidian workspace state in nested vaults
|
||||||
|
**/.obsidian/workspace.json
|
||||||
|
**/.obsidian/workspace-mobile.json
|
||||||
|
|||||||
12
.obsidian/app.json
vendored
Normal file
12
.obsidian/app.json
vendored
Normal file
@@ -0,0 +1,12 @@
|
|||||||
|
{
|
||||||
|
"useMarkdownLinks": true,
|
||||||
|
"newFileLocation": "folder",
|
||||||
|
"newFileFolderPath": "_notes/08 - Meetings & Notes",
|
||||||
|
"attachmentFolderPath": "_notes/assets",
|
||||||
|
"defaultViewMode": "source",
|
||||||
|
"foldHeading": false,
|
||||||
|
"showLineNumber": true,
|
||||||
|
"readableLineLength": true,
|
||||||
|
"strictLineBreaks": false,
|
||||||
|
"showFrontmatter": false
|
||||||
|
}
|
||||||
7
.obsidian/community-plugins.json
vendored
Normal file
7
.obsidian/community-plugins.json
vendored
Normal file
@@ -0,0 +1,7 @@
|
|||||||
|
[
|
||||||
|
"dataview",
|
||||||
|
"obsidian-kanban",
|
||||||
|
"templater-obsidian",
|
||||||
|
"calendar",
|
||||||
|
"obsidian-tasks-plugin"
|
||||||
|
]
|
||||||
23
.obsidian/core-plugins.json
vendored
Normal file
23
.obsidian/core-plugins.json
vendored
Normal file
@@ -0,0 +1,23 @@
|
|||||||
|
{
|
||||||
|
"file-explorer": true,
|
||||||
|
"global-search": true,
|
||||||
|
"switcher": true,
|
||||||
|
"graph": true,
|
||||||
|
"backlink": true,
|
||||||
|
"canvas": true,
|
||||||
|
"outgoing-link": true,
|
||||||
|
"tag-pane": true,
|
||||||
|
"properties": true,
|
||||||
|
"note-composer": true,
|
||||||
|
"command-palette": true,
|
||||||
|
"editor-status": true,
|
||||||
|
"starred": true,
|
||||||
|
"markdown-importer": false,
|
||||||
|
"zk-prefixer": false,
|
||||||
|
"random-note": false,
|
||||||
|
"outline": true,
|
||||||
|
"word-count": true,
|
||||||
|
"file-recovery": true,
|
||||||
|
"publish": false,
|
||||||
|
"sync": false
|
||||||
|
}
|
||||||
81
CHANGELOG.md
81
CHANGELOG.md
@@ -6,6 +6,87 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/).
|
|||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
|
## [1.6.1] - 2026-04-04
|
||||||
|
|
||||||
|
Phase 4 — animation polish and final feature gaps. Flutter app reaches full feature parity with Consumer Web App v1.4.9.
|
||||||
|
|
||||||
|
### Added
|
||||||
|
- **BouncingLoader widget** (`lib/widgets/bouncing_loader.dart`): 3-dot bouncing animation with staggered 200 ms delays using `Curves.bounceOut`. Replaces `CircularProgressIndicator` in home, contribute, and review screens. Accepts `color`, `dotSize`, and `spacing` parameters.
|
||||||
|
- **DiceBear Notionists avatars on review cards** (REV-001): `CachedNetworkImage` fetches `api.dicebear.com/9.x/notionists/svg?seed={username}`. Falls back to coloured initial letter `CircleAvatar` on error or while loading.
|
||||||
|
- **Server-side event search** (HOME-007): Search modal now sends `q` param to `EventsByPincodeView`; client-side filter stays for instant `onChanged` feedback while server results load on submit. Cache is bypassed for search queries. Django backend updated with `Q(title__icontains=q) | Q(description__icontains=q)` OR filter.
|
||||||
|
- **`flutter_staggered_animations: ^1.1.1`** added to pubspec.
|
||||||
|
|
||||||
|
### Changed
|
||||||
|
- **Review list stagger animation** (REV-003): `AnimationLimiter` + `AnimationConfiguration.toStaggeredList` wraps review cards with 375 ms slide-up + fade-in per item.
|
||||||
|
- **Review submit success spring animation** (REV-004): Checkmark icon now animates with `ScaleTransition` driven by `Curves.elasticOut` (600 ms) instead of a static icon swap.
|
||||||
|
- **Hero transitions on event cards** (UX-005): `Hero(tag: 'event-hero-{id}')` wraps event images in home screen and matching destination in learn more screen — enabling shared-element transitions.
|
||||||
|
- **FadeTransition on learn more screen** (UX-005): Screen body fades in with `Curves.easeIn` (350 ms) after event data loads.
|
||||||
|
- **AnimatedList stagger on leaderboard** (UX-005): `SliverList` entries animate with `AnimationConfiguration.staggeredList` — 375 ms slide-up + fade-in per row.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## [1.6.0] - 2026-04-04
|
||||||
|
|
||||||
|
Phase 3 — 26 medium-priority gaps. Profile editing, contributor profiles, share cards, booking promo codes, and UX system components.
|
||||||
|
|
||||||
|
### Added
|
||||||
|
- **Eventify ID badge** (AUTH-003): Verified badge displayed on profile and contributor cards for accounts with confirmed identity.
|
||||||
|
- **DiceBear TierAvatarRing** (`lib/widgets/tier_avatar_ring.dart`): Tier-coloured ring around profile avatars using DiceBear seed — Bronze/Silver/Gold/Platinum/Diamond colours.
|
||||||
|
- **Profile photo upload to server** (AUTH-006 / PROF-002): `PATCH /api/user/update-profile/` multipart endpoint; photo picker + crop flow integrated.
|
||||||
|
- **District picker** (PROF-004): 14 Kerala districts selectable from a bottom sheet; stored against user profile.
|
||||||
|
- **183-day profile cooldown lock** (AUTH-005): Username and display name locked for 183 days after last change; countdown shown in edit form.
|
||||||
|
- **Kerala pincodes JSON** (`assets/data/kerala_pincodes.json`) (LOC-003): Full offline pincode dataset covering all 14 districts; powers location-aware event discovery without API round trips.
|
||||||
|
- **Promo code input on booking** (BOOK-003): `POST /bookings/apply-promo/` endpoint; inline validation with success/error state in booking bar.
|
||||||
|
- **Contributor profile screen** (`lib/screens/contributor_profile_screen.dart`) (CTR-004/005): Public view of any contributor's stats, tier, events submitted, and achievements.
|
||||||
|
- **Share rank card** (`lib/features/share/share_rank_card.dart`) (SHARE-001/002): Generates a shareable tier/EP card image; `share_plus` used for native share sheet.
|
||||||
|
- **Share status button on contributor dashboard** (CTR-003): `OutlinedButton.icon` with `Share.share()` near tier/EP display.
|
||||||
|
- **GlassCard widget** (`lib/widgets/glass_card.dart`) (UX-003): Reusable frosted-glass surface used across gamification and profile screens.
|
||||||
|
- **EventifyBottomSheet** (`lib/widgets/eventify_bottom_sheet.dart`) (UX-004): Standardised bottom sheet with drag handle, rounded corners, and safe-area inset.
|
||||||
|
- **Featured events carousel** (HOME-004): Auto-scrolling hero carousel for featured/sponsored events on home screen.
|
||||||
|
- **Event image gallery** (EVT-001): Full-screen `PageView` carousel inside learn more screen with dot indicator.
|
||||||
|
|
||||||
|
### Changed
|
||||||
|
- **Real gamification data** (GAM-003/004/006): EP/RP transaction history, tier progression, and leaderboard all wired to live Node.js API — mock data removed.
|
||||||
|
- **Leaderboard card district display** (LDR-003): District badge shown per rank row; district filter pill row added above leaderboard.
|
||||||
|
- **Achievement badge display + unlock animation** (ACH-002/003): Badges rendered from API; confetti-style animation plays on first unlock.
|
||||||
|
- **Review responses** (REV-002): Organiser reply thread displayed below each review card.
|
||||||
|
- **Profile bio and social links** (PROF-001): Edit form includes bio textarea and links for Instagram, Twitter, LinkedIn.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## [1.5.1] - 2026-04-04
|
||||||
|
|
||||||
|
Phase 2 — 11 high-priority gaps. Authentication hardening, location services, real gamification data hookup, skeleton loading, and booking flow fixes.
|
||||||
|
|
||||||
|
### Added
|
||||||
|
- **Email OTP verification** (AUTH-004): 6-digit OTP sent on registration; verification screen blocks app access until confirmed.
|
||||||
|
- **Password reset flow** (AUTH-002): Forgot-password → OTP → new password screens; Django `POST /accounts/password-reset/` endpoint integrated.
|
||||||
|
- **Location permission + haversine distance sorting** (LOC-001/002): `geolocator` requests permission at startup; events sorted by straight-line distance from user's GPS coordinate.
|
||||||
|
- **Skeleton loading with shimmer** (UX-001): `shimmer: ^3.0.0` added; event feed, leaderboard, and profile screens show shimmer placeholders while data loads.
|
||||||
|
- **Contributor stats real API** (CTR-001): EP/RP balance and tier fetched from Node.js gamification endpoint on dashboard load.
|
||||||
|
- **Achievement progress tracking** (ACH-001): Progress bars and completion state fetched from API; local mock removed.
|
||||||
|
- **Profile stats row** (PROF-003): Likes / Posts / Views counts fetched from user profile API and displayed in profile header.
|
||||||
|
|
||||||
|
### Changed
|
||||||
|
- **Search modal with server pincode detection** (HOME-001/002/003): Search bottom sheet auto-detects user pincode; category filter chips filter from API results.
|
||||||
|
- **Real tier and EP display** (GAM-002/005): Contributor dashboard shows live tier and EP from Node.js API; tier badge in profile header updated to match.
|
||||||
|
- **District filter on leaderboard** (LDR-002): Leaderboard district pills populated from API; selecting filters rank table in real time.
|
||||||
|
- **Booking bar fixes** (EVT-003/BOOK-004): Fixed ticket-count stepper; booking confirmation screen correctly shows booking reference.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## [1.5.0] - 2026-04-04
|
||||||
|
|
||||||
|
Phase 1 — critical gaps. Live backend integration replacing all mock/stub data, payment checkout, and OAuth.
|
||||||
|
|
||||||
|
### Added
|
||||||
|
- **Gamification API integration**: EP, RP, leaderboard, and achievements wired to live Node.js endpoints at `app.eventifyplus.com/api/v1/` — all mock `GamificationService` data replaced.
|
||||||
|
- **Razorpay checkout** (BOOK-001): Native Razorpay SDK integrated; `POST /bookings/create/` → order creation → Razorpay payment sheet → `POST /bookings/verify/` webhook.
|
||||||
|
- **Google OAuth login** (AUTH-001): `google_sign_in` flow; tokens exchanged with Django `POST /accounts/google-auth/` endpoint.
|
||||||
|
- **Notification panel** (NOTIF-002/003/004): `DraggableScrollableSheet` notification drawer with 4 colour-coded notification types (booking, event, system, promo); mark-individual-read and mark-all-read actions.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
## [1.4.0] - 2026-03-18
|
## [1.4.0] - 2026-03-18
|
||||||
|
|
||||||
### Added
|
### Added
|
||||||
|
|||||||
1
_notes/.obsidian/app.json
vendored
Normal file
1
_notes/.obsidian/app.json
vendored
Normal file
@@ -0,0 +1 @@
|
|||||||
|
{}
|
||||||
1
_notes/.obsidian/appearance.json
vendored
Normal file
1
_notes/.obsidian/appearance.json
vendored
Normal file
@@ -0,0 +1 @@
|
|||||||
|
{}
|
||||||
7
_notes/.obsidian/community-plugins.json
vendored
Normal file
7
_notes/.obsidian/community-plugins.json
vendored
Normal file
@@ -0,0 +1,7 @@
|
|||||||
|
[
|
||||||
|
"dataview",
|
||||||
|
"obsidian-kanban",
|
||||||
|
"templater-obsidian",
|
||||||
|
"calendar",
|
||||||
|
"obsidian-tasks-plugin"
|
||||||
|
]
|
||||||
33
_notes/.obsidian/core-plugins.json
vendored
Normal file
33
_notes/.obsidian/core-plugins.json
vendored
Normal file
@@ -0,0 +1,33 @@
|
|||||||
|
{
|
||||||
|
"file-explorer": true,
|
||||||
|
"global-search": true,
|
||||||
|
"switcher": true,
|
||||||
|
"graph": true,
|
||||||
|
"backlink": true,
|
||||||
|
"canvas": true,
|
||||||
|
"outgoing-link": true,
|
||||||
|
"tag-pane": true,
|
||||||
|
"footnotes": false,
|
||||||
|
"properties": true,
|
||||||
|
"page-preview": true,
|
||||||
|
"daily-notes": true,
|
||||||
|
"templates": true,
|
||||||
|
"note-composer": true,
|
||||||
|
"command-palette": true,
|
||||||
|
"slash-command": false,
|
||||||
|
"editor-status": true,
|
||||||
|
"bookmarks": true,
|
||||||
|
"markdown-importer": false,
|
||||||
|
"zk-prefixer": false,
|
||||||
|
"random-note": false,
|
||||||
|
"outline": true,
|
||||||
|
"word-count": true,
|
||||||
|
"slides": false,
|
||||||
|
"audio-recorder": false,
|
||||||
|
"workspaces": false,
|
||||||
|
"file-recovery": true,
|
||||||
|
"publish": false,
|
||||||
|
"sync": true,
|
||||||
|
"bases": true,
|
||||||
|
"webviewer": false
|
||||||
|
}
|
||||||
22
_notes/.obsidian/graph.json
vendored
Normal file
22
_notes/.obsidian/graph.json
vendored
Normal file
@@ -0,0 +1,22 @@
|
|||||||
|
{
|
||||||
|
"collapse-filter": true,
|
||||||
|
"search": "",
|
||||||
|
"showTags": false,
|
||||||
|
"showAttachments": false,
|
||||||
|
"hideUnresolved": false,
|
||||||
|
"showOrphans": true,
|
||||||
|
"collapse-color-groups": true,
|
||||||
|
"colorGroups": [],
|
||||||
|
"collapse-display": true,
|
||||||
|
"showArrow": false,
|
||||||
|
"textFadeMultiplier": 0,
|
||||||
|
"nodeSizeMultiplier": 1,
|
||||||
|
"lineSizeMultiplier": 1,
|
||||||
|
"collapse-forces": true,
|
||||||
|
"centerStrength": 0.518713248970312,
|
||||||
|
"repelStrength": 10,
|
||||||
|
"linkStrength": 1,
|
||||||
|
"linkDistance": 250,
|
||||||
|
"scale": 2.078152725527059,
|
||||||
|
"close": true
|
||||||
|
}
|
||||||
10
_notes/.obsidian/plugins/calendar/data.json
vendored
Normal file
10
_notes/.obsidian/plugins/calendar/data.json
vendored
Normal file
@@ -0,0 +1,10 @@
|
|||||||
|
{
|
||||||
|
"shouldConfirmBeforeCreate": true,
|
||||||
|
"weekStart": "locale",
|
||||||
|
"wordsPerDot": 250,
|
||||||
|
"showWeeklyNote": false,
|
||||||
|
"weeklyNoteFormat": "",
|
||||||
|
"weeklyNoteTemplate": "",
|
||||||
|
"weeklyNoteFolder": "",
|
||||||
|
"localeOverride": "system-default"
|
||||||
|
}
|
||||||
4459
_notes/.obsidian/plugins/calendar/main.js
vendored
Normal file
4459
_notes/.obsidian/plugins/calendar/main.js
vendored
Normal file
File diff suppressed because it is too large
Load Diff
10
_notes/.obsidian/plugins/calendar/manifest.json
vendored
Normal file
10
_notes/.obsidian/plugins/calendar/manifest.json
vendored
Normal file
@@ -0,0 +1,10 @@
|
|||||||
|
{
|
||||||
|
"id": "calendar",
|
||||||
|
"name": "Calendar",
|
||||||
|
"description": "Calendar view of your daily notes",
|
||||||
|
"version": "1.5.10",
|
||||||
|
"author": "Liam Cain",
|
||||||
|
"authorUrl": "https://github.com/liamcain/",
|
||||||
|
"isDesktopOnly": false,
|
||||||
|
"minAppVersion": "0.9.11"
|
||||||
|
}
|
||||||
20876
_notes/.obsidian/plugins/dataview/main.js
vendored
Normal file
20876
_notes/.obsidian/plugins/dataview/main.js
vendored
Normal file
File diff suppressed because one or more lines are too long
11
_notes/.obsidian/plugins/dataview/manifest.json
vendored
Normal file
11
_notes/.obsidian/plugins/dataview/manifest.json
vendored
Normal file
@@ -0,0 +1,11 @@
|
|||||||
|
{
|
||||||
|
"id": "dataview",
|
||||||
|
"name": "Dataview",
|
||||||
|
"version": "0.5.68",
|
||||||
|
"minAppVersion": "0.13.11",
|
||||||
|
"description": "Complex data views for the data-obsessed.",
|
||||||
|
"author": "Michael Brenan <blacksmithgu@gmail.com>",
|
||||||
|
"authorUrl": "https://github.com/blacksmithgu",
|
||||||
|
"helpUrl": "https://blacksmithgu.github.io/obsidian-dataview/",
|
||||||
|
"isDesktopOnly": false
|
||||||
|
}
|
||||||
141
_notes/.obsidian/plugins/dataview/styles.css
vendored
Normal file
141
_notes/.obsidian/plugins/dataview/styles.css
vendored
Normal file
@@ -0,0 +1,141 @@
|
|||||||
|
.block-language-dataview {
|
||||||
|
overflow-y: auto;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*****************/
|
||||||
|
/** Table Views **/
|
||||||
|
/*****************/
|
||||||
|
|
||||||
|
/* List View Default Styling; rendered internally as a table. */
|
||||||
|
.table-view-table {
|
||||||
|
width: 100%;
|
||||||
|
}
|
||||||
|
|
||||||
|
.table-view-table > thead > tr, .table-view-table > tbody > tr {
|
||||||
|
margin-top: 1em;
|
||||||
|
margin-bottom: 1em;
|
||||||
|
text-align: left;
|
||||||
|
}
|
||||||
|
|
||||||
|
.table-view-table > tbody > tr:hover {
|
||||||
|
background-color: var(--table-row-background-hover);
|
||||||
|
}
|
||||||
|
|
||||||
|
.table-view-table > thead > tr > th {
|
||||||
|
font-weight: 700;
|
||||||
|
font-size: larger;
|
||||||
|
border-top: none;
|
||||||
|
border-left: none;
|
||||||
|
border-right: none;
|
||||||
|
border-bottom: solid;
|
||||||
|
|
||||||
|
max-width: 100%;
|
||||||
|
}
|
||||||
|
|
||||||
|
.table-view-table > tbody > tr > td {
|
||||||
|
text-align: left;
|
||||||
|
border: none;
|
||||||
|
font-weight: 400;
|
||||||
|
max-width: 100%;
|
||||||
|
}
|
||||||
|
|
||||||
|
.table-view-table ul, .table-view-table ol {
|
||||||
|
margin-block-start: 0.2em !important;
|
||||||
|
margin-block-end: 0.2em !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Rendered value styling for any view. */
|
||||||
|
.dataview-result-list-root-ul {
|
||||||
|
padding: 0em !important;
|
||||||
|
margin: 0em !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.dataview-result-list-ul {
|
||||||
|
margin-block-start: 0.2em !important;
|
||||||
|
margin-block-end: 0.2em !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Generic grouping styling. */
|
||||||
|
.dataview.result-group {
|
||||||
|
padding-left: 8px;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*******************/
|
||||||
|
/** Inline Fields **/
|
||||||
|
/*******************/
|
||||||
|
|
||||||
|
.dataview.inline-field-key {
|
||||||
|
padding-left: 8px;
|
||||||
|
padding-right: 8px;
|
||||||
|
font-family: var(--font-monospace);
|
||||||
|
background-color: var(--background-primary-alt);
|
||||||
|
color: var(--nav-item-color-selected);
|
||||||
|
}
|
||||||
|
|
||||||
|
.dataview.inline-field-value {
|
||||||
|
padding-left: 8px;
|
||||||
|
padding-right: 8px;
|
||||||
|
font-family: var(--font-monospace);
|
||||||
|
background-color: var(--background-secondary-alt);
|
||||||
|
color: var(--nav-item-color-selected);
|
||||||
|
}
|
||||||
|
|
||||||
|
.dataview.inline-field-standalone-value {
|
||||||
|
padding-left: 8px;
|
||||||
|
padding-right: 8px;
|
||||||
|
font-family: var(--font-monospace);
|
||||||
|
background-color: var(--background-secondary-alt);
|
||||||
|
color: var(--nav-item-color-selected);
|
||||||
|
}
|
||||||
|
|
||||||
|
/***************/
|
||||||
|
/** Task View **/
|
||||||
|
/***************/
|
||||||
|
|
||||||
|
.dataview.task-list-item, .dataview.task-list-basic-item {
|
||||||
|
margin-top: 3px;
|
||||||
|
margin-bottom: 3px;
|
||||||
|
transition: 0.4s;
|
||||||
|
}
|
||||||
|
|
||||||
|
.dataview.task-list-item:hover, .dataview.task-list-basic-item:hover {
|
||||||
|
background-color: var(--text-selection);
|
||||||
|
box-shadow: -40px 0 0 var(--text-selection);
|
||||||
|
cursor: pointer;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*****************/
|
||||||
|
/** Error Views **/
|
||||||
|
/*****************/
|
||||||
|
|
||||||
|
div.dataview-error-box {
|
||||||
|
width: 100%;
|
||||||
|
min-height: 150px;
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: center;
|
||||||
|
border: 4px dashed var(--background-secondary);
|
||||||
|
}
|
||||||
|
|
||||||
|
.dataview-error-message {
|
||||||
|
color: var(--text-muted);
|
||||||
|
text-align: center;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*************************/
|
||||||
|
/** Additional Metadata **/
|
||||||
|
/*************************/
|
||||||
|
|
||||||
|
.dataview.small-text {
|
||||||
|
font-size: smaller;
|
||||||
|
color: var(--text-muted);
|
||||||
|
margin-left: 3px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.dataview.small-text::before {
|
||||||
|
content: "(";
|
||||||
|
}
|
||||||
|
|
||||||
|
.dataview.small-text::after {
|
||||||
|
content: ")";
|
||||||
|
}
|
||||||
153
_notes/.obsidian/plugins/obsidian-kanban/main.js
vendored
Normal file
153
_notes/.obsidian/plugins/obsidian-kanban/main.js
vendored
Normal file
File diff suppressed because one or more lines are too long
11
_notes/.obsidian/plugins/obsidian-kanban/manifest.json
vendored
Normal file
11
_notes/.obsidian/plugins/obsidian-kanban/manifest.json
vendored
Normal file
@@ -0,0 +1,11 @@
|
|||||||
|
{
|
||||||
|
"id": "obsidian-kanban",
|
||||||
|
"name": "Kanban",
|
||||||
|
"version": "2.0.51",
|
||||||
|
"minAppVersion": "1.0.0",
|
||||||
|
"description": "Create markdown-backed Kanban boards in Obsidian.",
|
||||||
|
"author": "mgmeyers",
|
||||||
|
"authorUrl": "https://github.com/mgmeyers/obsidian-kanban",
|
||||||
|
"helpUrl": "https://publish.obsidian.md/kanban/Obsidian+Kanban+Plugin",
|
||||||
|
"isDesktopOnly": false
|
||||||
|
}
|
||||||
1
_notes/.obsidian/plugins/obsidian-kanban/styles.css
vendored
Normal file
1
_notes/.obsidian/plugins/obsidian-kanban/styles.css
vendored
Normal file
File diff suppressed because one or more lines are too long
508
_notes/.obsidian/plugins/obsidian-tasks-plugin/main.js
vendored
Normal file
508
_notes/.obsidian/plugins/obsidian-tasks-plugin/main.js
vendored
Normal file
File diff suppressed because one or more lines are too long
12
_notes/.obsidian/plugins/obsidian-tasks-plugin/manifest.json
vendored
Normal file
12
_notes/.obsidian/plugins/obsidian-tasks-plugin/manifest.json
vendored
Normal file
@@ -0,0 +1,12 @@
|
|||||||
|
{
|
||||||
|
"id": "obsidian-tasks-plugin",
|
||||||
|
"name": "Tasks",
|
||||||
|
"version": "7.23.1",
|
||||||
|
"minAppVersion": "1.4.0",
|
||||||
|
"description": "Track tasks across your vault. Supports due dates, recurring tasks, done dates, sub-set of checklist items, and filtering.",
|
||||||
|
"helpUrl": "https://publish.obsidian.md/tasks/",
|
||||||
|
"author": "Clare Macrae and Ilyas Landikov (created by Martin Schenck)",
|
||||||
|
"authorUrl": "https://github.com/obsidian-tasks-group",
|
||||||
|
"fundingUrl": "https://github.com/sponsors/claremacrae",
|
||||||
|
"isDesktopOnly": false
|
||||||
|
}
|
||||||
1
_notes/.obsidian/plugins/obsidian-tasks-plugin/styles.css
vendored
Normal file
1
_notes/.obsidian/plugins/obsidian-tasks-plugin/styles.css
vendored
Normal file
File diff suppressed because one or more lines are too long
45
_notes/.obsidian/plugins/templater-obsidian/main.js
vendored
Normal file
45
_notes/.obsidian/plugins/templater-obsidian/main.js
vendored
Normal file
File diff suppressed because one or more lines are too long
11
_notes/.obsidian/plugins/templater-obsidian/manifest.json
vendored
Normal file
11
_notes/.obsidian/plugins/templater-obsidian/manifest.json
vendored
Normal file
@@ -0,0 +1,11 @@
|
|||||||
|
{
|
||||||
|
"id": "templater-obsidian",
|
||||||
|
"name": "Templater",
|
||||||
|
"version": "2.18.1",
|
||||||
|
"description": "Create and use templates",
|
||||||
|
"minAppVersion": "1.5.0",
|
||||||
|
"author": "SilentVoid",
|
||||||
|
"authorUrl": "https://github.com/SilentVoid13",
|
||||||
|
"helpUrl": "https://silentvoid13.github.io/Templater/",
|
||||||
|
"isDesktopOnly": false
|
||||||
|
}
|
||||||
226
_notes/.obsidian/plugins/templater-obsidian/styles.css
vendored
Normal file
226
_notes/.obsidian/plugins/templater-obsidian/styles.css
vendored
Normal file
@@ -0,0 +1,226 @@
|
|||||||
|
.templater_search {
|
||||||
|
width: calc(100% - 20px);
|
||||||
|
}
|
||||||
|
|
||||||
|
.templater_div {
|
||||||
|
border-top: 1px solid var(--background-modifier-border);
|
||||||
|
}
|
||||||
|
|
||||||
|
.templater_div > .setting-item {
|
||||||
|
border-top: none !important;
|
||||||
|
align-self: center;
|
||||||
|
}
|
||||||
|
|
||||||
|
.templater_div > .setting-item > .setting-item-control {
|
||||||
|
justify-content: space-around;
|
||||||
|
padding: 0;
|
||||||
|
width: 100%;
|
||||||
|
}
|
||||||
|
|
||||||
|
.templater_div
|
||||||
|
> .setting-item
|
||||||
|
> .setting-item-control
|
||||||
|
> .setting-editor-extra-setting-button {
|
||||||
|
align-self: center;
|
||||||
|
}
|
||||||
|
|
||||||
|
.templater_donating {
|
||||||
|
margin: 10px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.templater_title {
|
||||||
|
margin: 0;
|
||||||
|
padding: 0;
|
||||||
|
margin-top: 5px;
|
||||||
|
text-align: center;
|
||||||
|
}
|
||||||
|
|
||||||
|
.templater_template {
|
||||||
|
align-self: center;
|
||||||
|
margin-left: 5px;
|
||||||
|
margin-right: 5px;
|
||||||
|
width: 70%;
|
||||||
|
}
|
||||||
|
|
||||||
|
.templater_cmd {
|
||||||
|
margin-left: 5px;
|
||||||
|
margin-right: 5px;
|
||||||
|
font-size: 14px;
|
||||||
|
width: 100%;
|
||||||
|
}
|
||||||
|
|
||||||
|
.templater_div2 > .setting-item {
|
||||||
|
align-content: center;
|
||||||
|
justify-content: center;
|
||||||
|
}
|
||||||
|
|
||||||
|
.templater-prompt-div,
|
||||||
|
.templater-multisuggester-div {
|
||||||
|
display: flex;
|
||||||
|
}
|
||||||
|
|
||||||
|
.templater-prompt-form {
|
||||||
|
display: flex;
|
||||||
|
flex-grow: 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
.templater-prompt-input,
|
||||||
|
.templater-multisuggester-input {
|
||||||
|
flex-grow: 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
.templater-button-div {
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
align-items: center;
|
||||||
|
margin-top: 1rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
textarea.templater-prompt-input {
|
||||||
|
height: 10rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
textarea.templater-prompt-input:focus {
|
||||||
|
border-color: var(--interactive-accent);
|
||||||
|
}
|
||||||
|
|
||||||
|
.templater-multisuggester-list {
|
||||||
|
margin: 1.5em 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.cm-s-obsidian .templater-command-bg {
|
||||||
|
left: 0px;
|
||||||
|
right: 0px;
|
||||||
|
background-color: var(--background-primary-alt);
|
||||||
|
}
|
||||||
|
|
||||||
|
.cm-s-obsidian .cm-templater-command {
|
||||||
|
font-size: 0.85em;
|
||||||
|
font-family: var(--font-monospace);
|
||||||
|
line-height: 1.3;
|
||||||
|
}
|
||||||
|
|
||||||
|
.cm-s-obsidian .templater-inline .cm-templater-command {
|
||||||
|
background-color: var(--background-primary-alt);
|
||||||
|
}
|
||||||
|
|
||||||
|
.cm-s-obsidian .cm-templater-command.cm-templater-opening-tag {
|
||||||
|
font-weight: bold;
|
||||||
|
}
|
||||||
|
|
||||||
|
.cm-s-obsidian .cm-templater-command.cm-templater-closing-tag {
|
||||||
|
font-weight: bold;
|
||||||
|
}
|
||||||
|
|
||||||
|
.cm-s-obsidian .cm-templater-command.cm-templater-interpolation-tag {
|
||||||
|
color: var(--code-property, #008bff);
|
||||||
|
}
|
||||||
|
|
||||||
|
.cm-s-obsidian .cm-templater-command.cm-templater-execution-tag {
|
||||||
|
color: var(--code-function, #c0d700);
|
||||||
|
}
|
||||||
|
|
||||||
|
.cm-s-obsidian .cm-templater-command.cm-keyword {
|
||||||
|
color: var(--code-keyword, #00a7aa);
|
||||||
|
font-weight: normal;
|
||||||
|
}
|
||||||
|
|
||||||
|
.cm-s-obsidian .cm-templater-command.cm-atom {
|
||||||
|
color: var(--code-normal, #f39b35);
|
||||||
|
}
|
||||||
|
|
||||||
|
.cm-s-obsidian .cm-templater-command.cm-value,
|
||||||
|
.cm-s-obsidian .cm-templater-command.cm-number,
|
||||||
|
.cm-s-obsidian .cm-templater-command.cm-type {
|
||||||
|
color: var(--code-value, #a06fca);
|
||||||
|
}
|
||||||
|
|
||||||
|
.cm-s-obsidian .cm-templater-command.cm-def,
|
||||||
|
.cm-s-obsidian .cm-templater-command.cm-type.cm-def {
|
||||||
|
color: var(--code-normal, var(--text-normal));
|
||||||
|
}
|
||||||
|
|
||||||
|
.cm-s-obsidian .cm-templater-command.cm-property,
|
||||||
|
.cm-s-obsidian .cm-templater-command.cm-property.cm-def,
|
||||||
|
.cm-s-obsidian .cm-templater-command.cm-attribute {
|
||||||
|
color: var(--code-function, #98e342);
|
||||||
|
}
|
||||||
|
|
||||||
|
.cm-s-obsidian .cm-templater-command.cm-variable,
|
||||||
|
.cm-s-obsidian .cm-templater-command.cm-variable-2,
|
||||||
|
.cm-s-obsidian .cm-templater-command.cm-variable-3,
|
||||||
|
.cm-s-obsidian .cm-templater-command.cm-meta {
|
||||||
|
color: var(--code-property, #d4d4d4);
|
||||||
|
}
|
||||||
|
|
||||||
|
.cm-s-obsidian .cm-templater-command.cm-callee,
|
||||||
|
.cm-s-obsidian .cm-templater-command.cm-operator,
|
||||||
|
.cm-s-obsidian .cm-templater-command.cm-qualifier,
|
||||||
|
.cm-s-obsidian .cm-templater-command.cm-builtin {
|
||||||
|
color: var(--code-operator, #fc4384);
|
||||||
|
}
|
||||||
|
|
||||||
|
.cm-s-obsidian .cm-templater-command.cm-tag {
|
||||||
|
color: var(--code-tag, #fc4384);
|
||||||
|
}
|
||||||
|
|
||||||
|
.cm-s-obsidian .cm-templater-command.cm-comment,
|
||||||
|
.cm-s-obsidian .cm-templater-command.cm-comment.cm-tag,
|
||||||
|
.cm-s-obsidian .cm-templater-command.cm-comment.cm-attribute {
|
||||||
|
color: var(--code-comment, #696d70);
|
||||||
|
}
|
||||||
|
|
||||||
|
.cm-s-obsidian .cm-templater-command.cm-string,
|
||||||
|
.cm-s-obsidian .cm-templater-command.cm-string-2 {
|
||||||
|
color: var(--code-string, #e6db74);
|
||||||
|
}
|
||||||
|
|
||||||
|
.cm-s-obsidian .cm-templater-command.cm-header,
|
||||||
|
.cm-s-obsidian .cm-templater-command.cm-hr {
|
||||||
|
color: var(--code-keyword, #da7dae);
|
||||||
|
}
|
||||||
|
|
||||||
|
.cm-s-obsidian .cm-templater-command.cm-link {
|
||||||
|
color: var(--code-normal, #696d70);
|
||||||
|
}
|
||||||
|
|
||||||
|
.cm-s-obsidian .cm-templater-command.cm-error {
|
||||||
|
border-bottom: 1px solid #c42412;
|
||||||
|
}
|
||||||
|
|
||||||
|
.CodeMirror-hints {
|
||||||
|
position: absolute;
|
||||||
|
z-index: 10;
|
||||||
|
overflow: hidden;
|
||||||
|
list-style: none;
|
||||||
|
|
||||||
|
margin: 0;
|
||||||
|
padding: 2px;
|
||||||
|
|
||||||
|
-webkit-box-shadow: 2px 3px 5px rgba(0, 0, 0, 0.2);
|
||||||
|
-moz-box-shadow: 2px 3px 5px rgba(0, 0, 0, 0.2);
|
||||||
|
box-shadow: 2px 3px 5px rgba(0, 0, 0, 0.2);
|
||||||
|
border-radius: 3px;
|
||||||
|
border: 1px solid silver;
|
||||||
|
|
||||||
|
background: white;
|
||||||
|
font-size: 90%;
|
||||||
|
font-family: monospace;
|
||||||
|
|
||||||
|
max-height: 20em;
|
||||||
|
overflow-y: auto;
|
||||||
|
}
|
||||||
|
|
||||||
|
.CodeMirror-hint {
|
||||||
|
margin: 0;
|
||||||
|
padding: 0 4px;
|
||||||
|
border-radius: 2px;
|
||||||
|
white-space: pre;
|
||||||
|
color: black;
|
||||||
|
cursor: pointer;
|
||||||
|
}
|
||||||
|
|
||||||
|
li.CodeMirror-hint-active {
|
||||||
|
background: #08f;
|
||||||
|
color: white;
|
||||||
|
}
|
||||||
29
_notes/.obsidian/types.json
vendored
Normal file
29
_notes/.obsidian/types.json
vendored
Normal file
@@ -0,0 +1,29 @@
|
|||||||
|
{
|
||||||
|
"types": {
|
||||||
|
"aliases": "aliases",
|
||||||
|
"cssclasses": "multitext",
|
||||||
|
"tags": "tags",
|
||||||
|
"TQ_explain": "checkbox",
|
||||||
|
"TQ_extra_instructions": "text",
|
||||||
|
"TQ_short_mode": "checkbox",
|
||||||
|
"TQ_show_backlink": "checkbox",
|
||||||
|
"TQ_show_cancelled_date": "checkbox",
|
||||||
|
"TQ_show_created_date": "checkbox",
|
||||||
|
"TQ_show_depends_on": "checkbox",
|
||||||
|
"TQ_show_done_date": "checkbox",
|
||||||
|
"TQ_show_due_date": "checkbox",
|
||||||
|
"TQ_show_edit_button": "checkbox",
|
||||||
|
"TQ_show_id": "checkbox",
|
||||||
|
"TQ_show_on_completion": "checkbox",
|
||||||
|
"TQ_show_postpone_button": "checkbox",
|
||||||
|
"TQ_show_priority": "checkbox",
|
||||||
|
"TQ_show_recurrence_rule": "checkbox",
|
||||||
|
"TQ_show_scheduled_date": "checkbox",
|
||||||
|
"TQ_show_start_date": "checkbox",
|
||||||
|
"TQ_show_tags": "checkbox",
|
||||||
|
"TQ_show_task_count": "checkbox",
|
||||||
|
"TQ_show_toolbar": "checkbox",
|
||||||
|
"TQ_show_tree": "checkbox",
|
||||||
|
"TQ_show_urgency": "checkbox"
|
||||||
|
}
|
||||||
|
}
|
||||||
55
_notes/00 - Home/Dashboard.md
Normal file
55
_notes/00 - Home/Dashboard.md
Normal file
@@ -0,0 +1,55 @@
|
|||||||
|
# Eventify — Project Dashboard
|
||||||
|
|
||||||
|
> **Eventify** is a multi-platform event discovery & management ecosystem consisting of 4 frontends, a Django backend, and Docker-based infrastructure on AWS EC2.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Ecosystem Overview
|
||||||
|
|
||||||
|
| Project | Domain / Platform | Tech Stack | Path |
|
||||||
|
|---------|-------------------|------------|------|
|
||||||
|
| **Main Web App** | `app.eventifyplus.com` | React 18 + Vite + TS + Tailwind | [[09 - Projects/App - Web Frontend]] |
|
||||||
|
| **Admin Panel** | `admin.eventifyplus.com` | React 18 + Vite + Shadcn/UI + Tailwind | [[09 - Projects/Admin - Command Center]] |
|
||||||
|
| **Partner Portal** | `partner.eventifyplus.com` | Next.js 16 + React 19 + Prisma + Tailwind | [[09 - Projects/Partner Portal]] |
|
||||||
|
| **Mobile App** | iOS / Android / Desktop | Flutter (Dart) | [[09 - Projects/Mobile - Flutter]] |
|
||||||
|
| **Backend API** | `uat.eventifyplus.com/api/` | Django (Python) | [[09 - Projects/Backend - Django]] |
|
||||||
|
| **Infrastructure** | AWS EC2 + Docker | Docker Compose, Nginx | [[10 - Infrastructure/Server & Docker]] |
|
||||||
|
| **Server Monitor** | `status.eventifyplus.com` | Node.js + Docker | [[10 - Infrastructure/Server Monitor]] |
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Quick Links
|
||||||
|
|
||||||
|
| Area | Note |
|
||||||
|
|------|------|
|
||||||
|
| Architecture | [[01 - Architecture/Overview]] |
|
||||||
|
| Folder Structure | [[01 - Architecture/Folder Structure]] |
|
||||||
|
| State Management | [[01 - Architecture/State Management]] |
|
||||||
|
| Features | [[02 - Features/Auth]] · [[02 - Features/Events]] · [[02 - Features/Gamification]] · [[02 - Features/Reviews]] |
|
||||||
|
| Screens | [[03 - Screens/Screen Index]] |
|
||||||
|
| API & Backend | [[04 - API & Backend/API Notes]] |
|
||||||
|
| Tasks | [[05 - Tasks & Planning/Kanban]] · [[05 - Tasks & Planning/Backlog]] |
|
||||||
|
| Bugs | [[06 - Bugs & Issues/Bug Log]] |
|
||||||
|
| Design | [[07 - Design & UI/Design Notes]] |
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Active Tasks
|
||||||
|
|
||||||
|
```dataview
|
||||||
|
TASK
|
||||||
|
FROM "_notes"
|
||||||
|
WHERE !completed
|
||||||
|
LIMIT 10
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Recent Notes
|
||||||
|
|
||||||
|
```dataview
|
||||||
|
TABLE file.mtime AS "Last Modified"
|
||||||
|
FROM "_notes"
|
||||||
|
SORT file.mtime DESC
|
||||||
|
LIMIT 8
|
||||||
|
```
|
||||||
54
_notes/01 - Architecture/Folder Structure.md
Normal file
54
_notes/01 - Architecture/Folder Structure.md
Normal file
@@ -0,0 +1,54 @@
|
|||||||
|
# Folder Structure
|
||||||
|
|
||||||
|
## Source Code (`lib/`)
|
||||||
|
|
||||||
|
```
|
||||||
|
lib/
|
||||||
|
├── core/
|
||||||
|
│ ├── analytics/ # Analytics integration
|
||||||
|
│ ├── api/ # API client & interceptors
|
||||||
|
│ ├── auth/ # Authentication logic
|
||||||
|
│ ├── storage/ # Local storage implementations
|
||||||
|
│ ├── utils/ # Utility functions
|
||||||
|
│ ├── constants.dart # App-wide constants
|
||||||
|
│ └── theme_manager.dart # Dark/Light mode state
|
||||||
|
│
|
||||||
|
├── features/
|
||||||
|
│ ├── auth/ # Login, registration, session
|
||||||
|
│ ├── events/ # Event listing, detail, creation
|
||||||
|
│ ├── gamification/ # EP, RP, leaderboard, achievements
|
||||||
|
│ └── reviews/ # Review system
|
||||||
|
│
|
||||||
|
├── screens/
|
||||||
|
│ ├── home_screen.dart
|
||||||
|
│ ├── home_desktop_screen.dart
|
||||||
|
│ ├── login_screen.dart
|
||||||
|
│ ├── desktop_login_screen.dart
|
||||||
|
│ ├── booking_screen.dart
|
||||||
|
│ ├── calendar_screen.dart
|
||||||
|
│ ├── profile_screen.dart
|
||||||
|
│ ├── search_screen.dart
|
||||||
|
│ ├── responsive_layout.dart
|
||||||
|
│ └── ...
|
||||||
|
│
|
||||||
|
├── widgets/ # Reusable UI components
|
||||||
|
└── main.dart # Entry point
|
||||||
|
```
|
||||||
|
|
||||||
|
## Platform Folders
|
||||||
|
| Folder | Purpose |
|
||||||
|
|--------|---------|
|
||||||
|
| `android/` | Android native code |
|
||||||
|
| `ios/` | iOS native code |
|
||||||
|
| `web/` | Web entrypoint |
|
||||||
|
| `macos/` | macOS native |
|
||||||
|
| `windows/` | Windows native |
|
||||||
|
| `linux/` | Linux native |
|
||||||
|
|
||||||
|
## Assets
|
||||||
|
```
|
||||||
|
assets/
|
||||||
|
├── images/
|
||||||
|
├── fonts/
|
||||||
|
└── videos/
|
||||||
|
```
|
||||||
66
_notes/01 - Architecture/Overview.md
Normal file
66
_notes/01 - Architecture/Overview.md
Normal file
@@ -0,0 +1,66 @@
|
|||||||
|
# Architecture Overview
|
||||||
|
|
||||||
|
## Eventify Ecosystem
|
||||||
|
|
||||||
|
Eventify is a multi-project event management platform with **4 frontends**, a **Django backend**, and **Docker-based infrastructure** on AWS EC2.
|
||||||
|
|
||||||
|
```
|
||||||
|
┌─────────────────────────────────────────────────────┐
|
||||||
|
│ Users / Partners │
|
||||||
|
├──────────┬──────────┬───────────┬───────────────────┤
|
||||||
|
│ app.* │ admin.* │ partner.* │ Mobile App │
|
||||||
|
│ React │ React │ Next.js │ Flutter │
|
||||||
|
│ Vite+TS │ Shadcn │ Prisma │ iOS/Android/Web │
|
||||||
|
├──────────┴──────────┴───────────┴───────────────────┤
|
||||||
|
│ Django REST API (Python) │
|
||||||
|
│ uat.eventifyplus.com / prod.eventifyplus.com │
|
||||||
|
├─────────────────────────────────────────────────────┤
|
||||||
|
│ AWS EC2 · Docker · eventify-net │
|
||||||
|
│ Database · Server Monitor │
|
||||||
|
└─────────────────────────────────────────────────────┘
|
||||||
|
```
|
||||||
|
|
||||||
|
## Projects at a Glance
|
||||||
|
|
||||||
|
| Project | Domain | Stack | Local Path |
|
||||||
|
|---------|--------|-------|------------|
|
||||||
|
| Web App | `app.eventifyplus.com` | React 18 + Vite + TS + Tailwind | `mvnew.eventifyplus.com new/` |
|
||||||
|
| Admin | `admin.eventifyplus.com` | React 18 + Vite + Shadcn/UI | `eventify-command-center/` |
|
||||||
|
| Partner | `partner.eventifyplus.com` | Next.js 16 + Prisma + Tailwind | `eventify-partner/` |
|
||||||
|
| Mobile | iOS / Android / Desktop | Flutter + Dart + Provider | `Eventify-frontend/` |
|
||||||
|
| Backend | `uat.eventifyplus.com/api/` | Django 4.2+ (Python) | `eventify_backend/` |
|
||||||
|
| Monitor | `status.eventifyplus.com` | Node.js + Docker | `eventify-server-monitor/` |
|
||||||
|
|
||||||
|
All local projects live under `/Users/bshtechnologies/Documents/`.
|
||||||
|
|
||||||
|
## Backend Modules
|
||||||
|
|
||||||
|
| Module | Purpose |
|
||||||
|
|--------|---------|
|
||||||
|
| `accounts` | Users & auth |
|
||||||
|
| `events` | Event CRUD, types, images |
|
||||||
|
| `bookings` | Reservations |
|
||||||
|
| `reviews` | User reviews |
|
||||||
|
| `ledger` | Financial ledger |
|
||||||
|
| `banking_operations` | Payments |
|
||||||
|
| `gamification` | EP, RP, achievements, leaderboard |
|
||||||
|
| `eventify_logger` | Logging |
|
||||||
|
|
||||||
|
## Flutter App Architecture (Mobile)
|
||||||
|
|
||||||
|
Feature-first modular structure:
|
||||||
|
```
|
||||||
|
lib/
|
||||||
|
├── core/ # API, auth, storage, utils, constants, theme
|
||||||
|
├── features/ # auth, events, gamification, reviews
|
||||||
|
├── screens/ # Mobile + desktop screen variants
|
||||||
|
└── widgets/ # Reusable UI components
|
||||||
|
```
|
||||||
|
|
||||||
|
State Management: Provider (`^6.1.2`) — see [[State Management]]
|
||||||
|
|
||||||
|
## Detailed Notes
|
||||||
|
|
||||||
|
- **Per-project details:** [[09 - Projects/App - Web Frontend]] · [[09 - Projects/Admin - Command Center]] · [[09 - Projects/Partner Portal]] · [[09 - Projects/Mobile - Flutter]] · [[09 - Projects/Backend - Django]]
|
||||||
|
- **Infrastructure:** [[10 - Infrastructure/Server & Docker]] · [[10 - Infrastructure/Server Monitor]]
|
||||||
|
- **Flutter specifics:** [[Folder Structure]] · [[State Management]]
|
||||||
22
_notes/01 - Architecture/State Management.md
Normal file
22
_notes/01 - Architecture/State Management.md
Normal file
@@ -0,0 +1,22 @@
|
|||||||
|
# State Management
|
||||||
|
|
||||||
|
## Approach
|
||||||
|
Eventify uses **Provider** (`^6.1.2`) for state management.
|
||||||
|
|
||||||
|
## Pattern
|
||||||
|
- `ChangeNotifier` classes hold state
|
||||||
|
- `ChangeNotifierProvider` exposes state to the widget tree
|
||||||
|
- `Consumer<T>` / `context.watch<T>()` rebuilds UI on state change
|
||||||
|
- `context.read<T>()` for one-off reads without subscribing
|
||||||
|
|
||||||
|
## Key Providers
|
||||||
|
> Fill in as you identify providers in `lib/core/` and `lib/features/`
|
||||||
|
|
||||||
|
| Provider | Location | Responsibility |
|
||||||
|
|----------|----------|----------------|
|
||||||
|
| AuthProvider | `lib/core/auth/` | Session, login/logout |
|
||||||
|
| ThemeManager | `lib/core/theme_manager.dart` | Dark/Light mode toggle |
|
||||||
|
|
||||||
|
## Notes
|
||||||
|
- Desktop and mobile screens share the same providers via `responsive_layout.dart`
|
||||||
|
- Local persistence uses `shared_preferences` (not Provider)
|
||||||
28
_notes/02 - Features/Auth.md
Normal file
28
_notes/02 - Features/Auth.md
Normal file
@@ -0,0 +1,28 @@
|
|||||||
|
# Feature: Auth
|
||||||
|
|
||||||
|
**Module path:** `lib/features/auth/` + `lib/core/auth/`
|
||||||
|
|
||||||
|
## Overview
|
||||||
|
Handles user login, registration, and session management.
|
||||||
|
|
||||||
|
## Screens
|
||||||
|
- `login_screen.dart` — Mobile login
|
||||||
|
- `desktop_login_screen.dart` — Desktop login
|
||||||
|
|
||||||
|
## Key Files
|
||||||
|
| File | Purpose |
|
||||||
|
|------|---------|
|
||||||
|
| `lib/core/auth/` | Auth logic, tokens, session |
|
||||||
|
| `lib/features/auth/` | Auth feature UI & state |
|
||||||
|
|
||||||
|
## Flow
|
||||||
|
- [ ] Document login flow
|
||||||
|
- [ ] Document registration flow
|
||||||
|
- [ ] Document session persistence (shared_preferences?)
|
||||||
|
|
||||||
|
## Notes
|
||||||
|
> Add notes about OAuth, JWT, or custom auth as you discover them
|
||||||
|
|
||||||
|
## Related
|
||||||
|
- [[01 - Architecture/State Management]]
|
||||||
|
- [[04 - API & Backend/API Notes]]
|
||||||
29
_notes/02 - Features/Events.md
Normal file
29
_notes/02 - Features/Events.md
Normal file
@@ -0,0 +1,29 @@
|
|||||||
|
# Feature: Events
|
||||||
|
|
||||||
|
**Module path:** `lib/features/events/`
|
||||||
|
|
||||||
|
## Overview
|
||||||
|
Core feature — event discovery, listing, detail view, booking, and calendar integration.
|
||||||
|
|
||||||
|
## Related Screens
|
||||||
|
- `home_screen.dart` / `home_desktop_screen.dart` — Event feed
|
||||||
|
- `booking_screen.dart` — Event booking flow
|
||||||
|
- `calendar_screen.dart` — Calendar view of events
|
||||||
|
- `search_screen.dart` — Event search
|
||||||
|
|
||||||
|
## Key Capabilities
|
||||||
|
- [ ] Event listing & filtering
|
||||||
|
- [ ] Event detail view
|
||||||
|
- [ ] Booking flow
|
||||||
|
- [ ] Calendar integration (`table_calendar`)
|
||||||
|
- [ ] Location/map view (`google_maps_flutter`, `geolocator`)
|
||||||
|
- [ ] Media (images/video via `image_picker`, `video_player`)
|
||||||
|
|
||||||
|
## API Endpoints
|
||||||
|
> Document event API endpoints here as you discover them
|
||||||
|
|
||||||
|
## Notes
|
||||||
|
|
||||||
|
## Related
|
||||||
|
- [[02 - Features/Reviews]]
|
||||||
|
- [[03 - Screens/Screen Index]]
|
||||||
29
_notes/02 - Features/Gamification.md
Normal file
29
_notes/02 - Features/Gamification.md
Normal file
@@ -0,0 +1,29 @@
|
|||||||
|
# Feature: Gamification
|
||||||
|
|
||||||
|
**Module path:** `lib/features/gamification/`
|
||||||
|
|
||||||
|
## Overview
|
||||||
|
Engagement system using points, rankings, and achievements to reward users.
|
||||||
|
|
||||||
|
## Components
|
||||||
|
- **EP (Experience Points)** — earned by attending/booking events
|
||||||
|
- **RP (Reward Points)** — redeemable rewards currency
|
||||||
|
- **Leaderboard** — ranked user standings
|
||||||
|
- **Achievements** — milestone badges/unlocks
|
||||||
|
|
||||||
|
## Key Files
|
||||||
|
| File | Purpose |
|
||||||
|
|------|---------|
|
||||||
|
| `lib/features/gamification/` | All gamification logic & UI |
|
||||||
|
|
||||||
|
## Game Mechanics
|
||||||
|
- [ ] Document EP earning rules
|
||||||
|
- [ ] Document RP earning rules
|
||||||
|
- [ ] Document achievement triggers
|
||||||
|
- [ ] Document leaderboard ranking logic
|
||||||
|
|
||||||
|
## Notes
|
||||||
|
|
||||||
|
## Related
|
||||||
|
- [[02 - Features/Events]]
|
||||||
|
- [[04 - API & Backend/API Notes]]
|
||||||
24
_notes/02 - Features/Reviews.md
Normal file
24
_notes/02 - Features/Reviews.md
Normal file
@@ -0,0 +1,24 @@
|
|||||||
|
# Feature: Reviews
|
||||||
|
|
||||||
|
**Module path:** `lib/features/reviews/`
|
||||||
|
|
||||||
|
## Overview
|
||||||
|
Allows users to leave and read reviews for events they have attended.
|
||||||
|
|
||||||
|
## Key Files
|
||||||
|
| File | Purpose |
|
||||||
|
|------|---------|
|
||||||
|
| `lib/features/reviews/` | Review UI & logic |
|
||||||
|
|
||||||
|
## Flow
|
||||||
|
- [ ] Document review submission flow
|
||||||
|
- [ ] Document review display (event detail page?)
|
||||||
|
- [ ] Document rating system (stars, score?)
|
||||||
|
|
||||||
|
## API Endpoints
|
||||||
|
> Document review API endpoints here
|
||||||
|
|
||||||
|
## Notes
|
||||||
|
|
||||||
|
## Related
|
||||||
|
- [[02 - Features/Events]]
|
||||||
26
_notes/03 - Screens/Screen Index.md
Normal file
26
_notes/03 - Screens/Screen Index.md
Normal file
@@ -0,0 +1,26 @@
|
|||||||
|
# Screen Index
|
||||||
|
|
||||||
|
## Mobile Screens
|
||||||
|
| Screen | File | Description |
|
||||||
|
|--------|------|-------------|
|
||||||
|
| Home | `lib/screens/home_screen.dart` | Main event feed |
|
||||||
|
| Login | `lib/screens/login_screen.dart` | User login |
|
||||||
|
| Booking | `lib/screens/booking_screen.dart` | Event booking flow |
|
||||||
|
| Calendar | `lib/screens/calendar_screen.dart` | Calendar view |
|
||||||
|
| Profile | `lib/screens/profile_screen.dart` | User profile & settings |
|
||||||
|
| Search | `lib/screens/search_screen.dart` | Event search |
|
||||||
|
|
||||||
|
## Desktop Screens
|
||||||
|
| Screen | File | Description |
|
||||||
|
|--------|------|-------------|
|
||||||
|
| Home (Desktop) | `lib/screens/home_desktop_screen.dart` | Desktop dashboard |
|
||||||
|
| Login (Desktop) | `lib/screens/desktop_login_screen.dart` | Desktop login |
|
||||||
|
|
||||||
|
## Layout
|
||||||
|
| File | Purpose |
|
||||||
|
|------|---------|
|
||||||
|
| `lib/screens/responsive_layout.dart` | Switches between mobile/desktop layouts |
|
||||||
|
|
||||||
|
## Notes
|
||||||
|
- Responsive layout builder detects screen width and renders the appropriate variant
|
||||||
|
- Both mobile and desktop screens consume the same Providers
|
||||||
46
_notes/04 - API & Backend/API Notes.md
Normal file
46
_notes/04 - API & Backend/API Notes.md
Normal file
@@ -0,0 +1,46 @@
|
|||||||
|
# API & Backend Notes
|
||||||
|
|
||||||
|
**API client location:** `lib/core/api/`
|
||||||
|
|
||||||
|
## Overview
|
||||||
|
> Document the backend API base URL, auth method, and overall structure here.
|
||||||
|
|
||||||
|
## Authentication
|
||||||
|
> e.g. Bearer token, JWT, OAuth2 — add details as you discover them
|
||||||
|
|
||||||
|
## Endpoints
|
||||||
|
|
||||||
|
### Auth
|
||||||
|
| Method | Endpoint | Description |
|
||||||
|
|--------|----------|-------------|
|
||||||
|
| POST | `/auth/login` | User login |
|
||||||
|
| POST | `/auth/register` | User registration |
|
||||||
|
| POST | `/auth/logout` | Logout |
|
||||||
|
|
||||||
|
### Events
|
||||||
|
| Method | Endpoint | Description |
|
||||||
|
|--------|----------|-------------|
|
||||||
|
| GET | `/events` | List events |
|
||||||
|
| GET | `/events/:id` | Event detail |
|
||||||
|
| POST | `/events/:id/book` | Book event |
|
||||||
|
|
||||||
|
### Reviews
|
||||||
|
| Method | Endpoint | Description |
|
||||||
|
|--------|----------|-------------|
|
||||||
|
| GET | `/events/:id/reviews` | Get reviews |
|
||||||
|
| POST | `/events/:id/reviews` | Submit review |
|
||||||
|
|
||||||
|
### Gamification
|
||||||
|
| Method | Endpoint | Description |
|
||||||
|
|--------|----------|-------------|
|
||||||
|
| GET | `/leaderboard` | Get leaderboard |
|
||||||
|
| GET | `/users/:id/achievements` | User achievements |
|
||||||
|
|
||||||
|
> Update endpoints above as you explore `lib/core/api/`
|
||||||
|
|
||||||
|
## Error Handling
|
||||||
|
> Document API error codes and how interceptors handle them
|
||||||
|
|
||||||
|
## Related
|
||||||
|
- [[02 - Features/Auth]]
|
||||||
|
- [[02 - Features/Events]]
|
||||||
16
_notes/05 - Tasks & Planning/Backlog.md
Normal file
16
_notes/05 - Tasks & Planning/Backlog.md
Normal file
@@ -0,0 +1,16 @@
|
|||||||
|
# Backlog
|
||||||
|
|
||||||
|
> Use this for longer-form feature/task descriptions. Move short tasks to [[Kanban]].
|
||||||
|
|
||||||
|
## Features to Build / Improve
|
||||||
|
- [ ]
|
||||||
|
|
||||||
|
## Documentation to Write
|
||||||
|
- [ ] API endpoint reference
|
||||||
|
- [ ] Onboarding guide for new contributors
|
||||||
|
|
||||||
|
## Bugs to Fix
|
||||||
|
> See [[06 - Bugs & Issues/Bug Log]]
|
||||||
|
|
||||||
|
## Ideas
|
||||||
|
- [ ]
|
||||||
30
_notes/05 - Tasks & Planning/Kanban.md
Normal file
30
_notes/05 - Tasks & Planning/Kanban.md
Normal file
@@ -0,0 +1,30 @@
|
|||||||
|
---
|
||||||
|
kanban-plugin: board
|
||||||
|
---
|
||||||
|
|
||||||
|
## Backlog
|
||||||
|
|
||||||
|
- [ ] Document API endpoints in [[04 - API & Backend/API Notes]]
|
||||||
|
- [ ] Map all Provider classes in [[01 - Architecture/State Management]]
|
||||||
|
- [ ] Complete auth flow documentation in [[02 - Features/Auth]]
|
||||||
|
- [ ] Document gamification EP/RP rules in [[02 - Features/Gamification]]
|
||||||
|
- [ ] Document partner onboarding flow in [[09 - Projects/Partner Portal]]
|
||||||
|
- [ ] Document admin dashboard views in [[09 - Projects/Admin - Command Center]]
|
||||||
|
- [ ] Map Nginx reverse proxy config in [[10 - Infrastructure/Server & Docker]]
|
||||||
|
- [ ] Document database schema & connection details
|
||||||
|
- [ ] Document CI/CD deployment pipeline
|
||||||
|
|
||||||
|
## In Progress
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
## Review
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
## Done
|
||||||
|
|
||||||
|
- [x] Set up Obsidian vault for Eventify ecosystem
|
||||||
|
- [x] Phase 3 (P3-A/K): AUTH-003, AUTH-005, AUTH-006, PROF-001, PROF-002, PROF-004 — Eventify ID badge, DiceBear TierAvatarRing, photo upload to server, district picker with 14 Kerala districts, 183-day cooldown lock
|
||||||
|
- [x] Phase 4 COMPLETE (2026-04-04): HOME-007 server-side event search, REV-001 DiceBear review avatars, REV-003 stagger animations, REV-004 spring success animation, UX-002 BouncingLoader widget, UX-005 Hero/Fade/AnimatedList animations — Flutter app reaches full feature parity with Consumer Web App v1.4.9
|
||||||
|
|
||||||
91
_notes/05 - Tasks & Planning/Phase2_Handoff.md
Normal file
91
_notes/05 - Tasks & Planning/Phase2_Handoff.md
Normal file
@@ -0,0 +1,91 @@
|
|||||||
|
# Phase 2–4 Handoff — Context for New Session
|
||||||
|
|
||||||
|
## Status
|
||||||
|
- **Phase 1:** COMPLETE — commit `29e326b`, pushed to `https://code.bshtech.net/Sicherhaven/Eventify-frontend`
|
||||||
|
- **Phase 2:** 17 effective gaps (19 listed, 2 done in Phase 1)
|
||||||
|
- **Phase 3:** 26 effective gaps (28 listed, 2 done in Phase 1)
|
||||||
|
- **Phase 4:** 7 gaps
|
||||||
|
|
||||||
|
**Full plan:** `/Users/bshtechnologies/.claude/plans/witty-kindling-lightning.md`
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Already Done in Phase 1 (skip these)
|
||||||
|
| ID | Feature |
|
||||||
|
|----|---------|
|
||||||
|
| NOTIF-002 | Notification panel (DraggableScrollableSheet built) |
|
||||||
|
| NOTIF-003 | Notification types (4 colors in notification_tile.dart) |
|
||||||
|
| NOTIF-004 | Mark all read + individual read state |
|
||||||
|
| LDR-004 | SQL RANK tie handling (auto-fixed by real API) |
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Phase 2 Task Summary (17 gaps, all High priority)
|
||||||
|
|
||||||
|
| Task | Gap IDs | Files | Backend? |
|
||||||
|
|------|---------|-------|----------|
|
||||||
|
| P2-A Home UX | HOME-001/002/003 | `home_screen.dart` | No |
|
||||||
|
| P2-B Auth | AUTH-004, AUTH-002 | `login_screen.dart`, `auth_service.dart` | AUTH-002 yes |
|
||||||
|
| P2-C Location | LOC-001, LOC-002 | `events_service.dart` | Yes (haversine) |
|
||||||
|
| P2-D Gamification UI | GAM-002, GAM-005, LDR-002 | `contribute_screen.dart`, `profile_screen.dart` | No |
|
||||||
|
| P2-E Contributor | CTR-001, CTR-002 | `contribute_screen.dart` | No |
|
||||||
|
| P2-F Achievements | ACH-001 | `gamification_service.dart` | No |
|
||||||
|
| P2-G Profile Cards | PROF-003 | `profile_screen.dart` | No |
|
||||||
|
| P2-H Skeleton Loading | UX-001 | all screens | No (add shimmer pkg) |
|
||||||
|
| P2-I Booking Bar | EVT-003, BOOK-004 | `learn_more_screen.dart` | No |
|
||||||
|
|
||||||
|
**New package needed:** `shimmer: ^3.0.0`
|
||||||
|
|
||||||
|
**Parallelizable:** All except AUTH-002 Flutter (depends on AUTH-002 Django).
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Phase 3 Task Summary (26 gaps, all Medium priority)
|
||||||
|
|
||||||
|
| Task | Gap IDs | New Files |
|
||||||
|
|------|---------|-----------|
|
||||||
|
| P3-A Auth profile | AUTH-003/005/006 | — |
|
||||||
|
| P3-B Home | HOME-004/006 | — |
|
||||||
|
| P3-C Event detail | EVT-001/002 | — |
|
||||||
|
| P3-D Pincodes DB | LOC-003 | `assets/data/kerala_pincodes.json` |
|
||||||
|
| P3-E Promo code | BOOK-003 | — |
|
||||||
|
| P3-F Gamification | GAM-003/004/006 | `lib/widgets/tier_avatar_ring.dart` |
|
||||||
|
| P3-G Leaderboard card | LDR-003 | — |
|
||||||
|
| P3-H Contributor profile | CTR-004/005 | `lib/screens/contributor_profile_screen.dart` |
|
||||||
|
| P3-I Achievements | ACH-002/003 | — |
|
||||||
|
| P3-J Reviews ring | REV-002 | — |
|
||||||
|
| P3-K Profile | PROF-001/002/004 | — |
|
||||||
|
| P3-L Share card | SHARE-001/002 | `lib/features/share/share_rank_card.dart` |
|
||||||
|
| P3-M UX system | UX-003/004/006 | `glass_card.dart`, `eventify_bottom_sheet.dart` |
|
||||||
|
|
||||||
|
**New packages:** `share_plus: ^7.0.0`
|
||||||
|
**New backend:** `POST /bookings/apply-promo/`, `PATCH /api/user/update-profile/` multipart
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Phase 4 Task Summary (7 gaps, all Low priority)
|
||||||
|
|
||||||
|
| Task | Gap IDs | Detail |
|
||||||
|
|------|---------|--------|
|
||||||
|
| P4-A Search + Share | HOME-007, CTR-003 | Event title search, share status |
|
||||||
|
| P4-B Reviews | REV-001/003/004 | DiceBear avatars, stagger anim, spring success |
|
||||||
|
| P4-C Animation polish | UX-002/005 | Bouncing loader, Hero/Slide/Fade transitions |
|
||||||
|
|
||||||
|
**New package:** `flutter_staggered_animations: ^1.1.1`
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Architecture Reminder
|
||||||
|
- **Gamification + Reviews** → Node.js `app.eventifyplus.com/api/v1/` → `_nodeBase`
|
||||||
|
- **Everything else** → Django `em.eventifyplus.com/api` → `baseUrl`
|
||||||
|
- Key file: `lib/core/api/api_endpoints.dart`
|
||||||
|
- State: Provider → register in `lib/main.dart` MultiProvider
|
||||||
|
- Pattern: copy from `lib/features/events/services/events_service.dart`
|
||||||
|
|
||||||
|
## How to Start in New Session
|
||||||
|
1. Open `Eventify-frontend` in Claude Code
|
||||||
|
2. Run `/eventify`
|
||||||
|
3. Say: **"Start Phase 2. Read _notes/05 - Tasks & Planning/Phase2_Handoff.md and the plan at /Users/bshtechnologies/.claude/plans/witty-kindling-lightning.md"**
|
||||||
|
|
||||||
|
## Gap Analysis CSV (full 61 gaps)
|
||||||
|
`/Users/bshtechnologies/Documents/Eventify-frontend/_notes/feature_gap_analysis.csv`
|
||||||
34
_notes/06 - Bugs & Issues/Bug Log.md
Normal file
34
_notes/06 - Bugs & Issues/Bug Log.md
Normal file
@@ -0,0 +1,34 @@
|
|||||||
|
# Bug Log
|
||||||
|
|
||||||
|
```dataview
|
||||||
|
TABLE status, platform, date AS "Reported"
|
||||||
|
FROM "_notes/06 - Bugs & Issues"
|
||||||
|
WHERE file.name != "Bug Log"
|
||||||
|
SORT date DESC
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## How to Log a Bug
|
||||||
|
|
||||||
|
Create a new note in this folder using the template below:
|
||||||
|
|
||||||
|
```
|
||||||
|
---
|
||||||
|
status: open
|
||||||
|
platform: iOS / Android / Web / Desktop
|
||||||
|
date: YYYY-MM-DD
|
||||||
|
---
|
||||||
|
|
||||||
|
## Description
|
||||||
|
|
||||||
|
## Steps to Reproduce
|
||||||
|
1.
|
||||||
|
2.
|
||||||
|
|
||||||
|
## Expected Behaviour
|
||||||
|
|
||||||
|
## Actual Behaviour
|
||||||
|
|
||||||
|
## Fix
|
||||||
|
```
|
||||||
30
_notes/07 - Design & UI/Design Notes.md
Normal file
30
_notes/07 - Design & UI/Design Notes.md
Normal file
@@ -0,0 +1,30 @@
|
|||||||
|
# Design & UI Notes
|
||||||
|
|
||||||
|
## Theme
|
||||||
|
- Dark/Light mode supported via `ThemeManager` (`lib/core/theme_manager.dart`)
|
||||||
|
- SVG assets rendered via `flutter_svg`
|
||||||
|
|
||||||
|
## Responsive Layout
|
||||||
|
- `responsive_layout.dart` switches between mobile and desktop layouts
|
||||||
|
- Breakpoints: > document exact breakpoint values
|
||||||
|
|
||||||
|
## Color Palette
|
||||||
|
> Add primary, secondary, background, accent colors here
|
||||||
|
|
||||||
|
## Typography
|
||||||
|
> Document font families and text styles used
|
||||||
|
|
||||||
|
## Component Library
|
||||||
|
> Notable reusable widgets in `lib/widgets/`
|
||||||
|
|
||||||
|
| Widget | File | Purpose |
|
||||||
|
|--------|------|---------|
|
||||||
|
| | | |
|
||||||
|
|
||||||
|
## Assets
|
||||||
|
- Images: `assets/images/`
|
||||||
|
- Fonts: `assets/fonts/`
|
||||||
|
- Videos: `assets/videos/` (large files, git-ignored)
|
||||||
|
- SVGs: used inline via `flutter_svg`
|
||||||
|
|
||||||
|
## Notes
|
||||||
25
_notes/08 - Meetings & Notes/Meeting Template.md
Normal file
25
_notes/08 - Meetings & Notes/Meeting Template.md
Normal file
@@ -0,0 +1,25 @@
|
|||||||
|
# Meeting Template
|
||||||
|
|
||||||
|
> Copy this file when creating a new meeting note. Rename it to the date + topic, e.g. `2026-03-31 Sprint Planning.md`
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
**Date:** YYYY-MM-DD
|
||||||
|
**Attendees:**
|
||||||
|
**Topic:**
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Agenda
|
||||||
|
1.
|
||||||
|
2.
|
||||||
|
|
||||||
|
## Discussion Notes
|
||||||
|
|
||||||
|
## Decisions Made
|
||||||
|
- [ ]
|
||||||
|
|
||||||
|
## Action Items
|
||||||
|
- [ ] (Owner) Task description — due YYYY-MM-DD
|
||||||
|
|
||||||
|
## Next Meeting
|
||||||
39
_notes/09 - Projects/Admin - Command Center.md
Normal file
39
_notes/09 - Projects/Admin - Command Center.md
Normal file
@@ -0,0 +1,39 @@
|
|||||||
|
# Admin — Command Center (admin.eventifyplus.com)
|
||||||
|
|
||||||
|
**Domain:** `admin.eventifyplus.com`
|
||||||
|
**Local Path:** `/Users/bshtechnologies/Documents/eventify-command-center/`
|
||||||
|
**Deployment:** TBD
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Tech Stack
|
||||||
|
|
||||||
|
| Layer | Technology |
|
||||||
|
|-------|-----------|
|
||||||
|
| Framework | React 18.2 + Vite 5.1 |
|
||||||
|
| Language | TypeScript |
|
||||||
|
| Styling | Tailwind CSS 4 |
|
||||||
|
| UI Library | Shadcn/UI |
|
||||||
|
| Design System | Neobrutalism Lite |
|
||||||
|
| Data Fetching | Tanstack Query |
|
||||||
|
| Tables | Tanstack Table |
|
||||||
|
|
||||||
|
## Features
|
||||||
|
|
||||||
|
- **User Management (CRM)** — manage all platform users
|
||||||
|
- **Event Moderation** — approve/reject/edit events
|
||||||
|
- **Review Management** — moderate user reviews
|
||||||
|
- **Real-time Analytics** — platform metrics dashboard
|
||||||
|
- **Platform Monitoring** — system health overview
|
||||||
|
|
||||||
|
## Key Screens
|
||||||
|
- [ ] Document admin dashboard layout
|
||||||
|
- [ ] Document user management views
|
||||||
|
- [ ] Document event moderation workflow
|
||||||
|
|
||||||
|
## Notes
|
||||||
|
|
||||||
|
## Related
|
||||||
|
- [[Backend - Django]]
|
||||||
|
- [[App - Web Frontend]]
|
||||||
|
- [[10 - Infrastructure/Server & Docker]]
|
||||||
51
_notes/09 - Projects/App - Web Frontend.md
Normal file
51
_notes/09 - Projects/App - Web Frontend.md
Normal file
@@ -0,0 +1,51 @@
|
|||||||
|
# App — Web Frontend (app.eventifyplus.com)
|
||||||
|
|
||||||
|
**Domain:** `app.eventifyplus.com` (currently `mvnew.eventifyplus.com`)
|
||||||
|
**Local Path:** `/Users/bshtechnologies/Documents/mvnew.eventifyplus.com new/`
|
||||||
|
**Deployment:** Vercel
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Tech Stack
|
||||||
|
|
||||||
|
| Layer | Technology |
|
||||||
|
|-------|-----------|
|
||||||
|
| Framework | React 18.2 + Vite 5.1 |
|
||||||
|
| Language | TypeScript |
|
||||||
|
| Styling | Tailwind CSS 3.4 |
|
||||||
|
| Animation | Framer Motion 12 |
|
||||||
|
| Deployment | Vercel (`vercel.json`) |
|
||||||
|
|
||||||
|
## Architecture
|
||||||
|
|
||||||
|
Micro-app injection pattern with separate build configs per module:
|
||||||
|
|
||||||
|
| Module | Build Command |
|
||||||
|
|--------|---------------|
|
||||||
|
| Leaderboard | `build:leaderboard` |
|
||||||
|
| Contributor | `build:contributor` |
|
||||||
|
| Achievements | `build:achievements` |
|
||||||
|
| Reviews | `build:reviews` |
|
||||||
|
|
||||||
|
## Server (embedded Express)
|
||||||
|
|
||||||
|
- Path: `server/` within the project
|
||||||
|
- Stack: Node.js / Express + PostgreSQL (`pg` driver)
|
||||||
|
- Port: 3000
|
||||||
|
- Has seed data (`server/seed.js`)
|
||||||
|
|
||||||
|
## Environment
|
||||||
|
- API: `https://uat.eventifyplus.com/api/` (UAT)
|
||||||
|
- API: `https://prod.eventifyplus.com/api` (Production)
|
||||||
|
|
||||||
|
## Key Features
|
||||||
|
- Event discovery & browsing
|
||||||
|
- Community contribution & gamification (EP, RP, leaderboard, achievements)
|
||||||
|
- User profiles & reviews
|
||||||
|
|
||||||
|
## Notes
|
||||||
|
|
||||||
|
## Related
|
||||||
|
- [[Backend - Django]]
|
||||||
|
- [[Mobile - Flutter]]
|
||||||
|
- [[Admin - Command Center]]
|
||||||
67
_notes/09 - Projects/Backend - Django.md
Normal file
67
_notes/09 - Projects/Backend - Django.md
Normal file
@@ -0,0 +1,67 @@
|
|||||||
|
# Backend — Django API
|
||||||
|
|
||||||
|
**API Base URL (UAT):** `https://uat.eventifyplus.com/api/`
|
||||||
|
**API Base URL (Prod):** `https://prod.eventifyplus.com/api`
|
||||||
|
**Local Path:** `/Users/bshtechnologies/Documents/eventify_backend/`
|
||||||
|
**SSH Access:** `ssh eventify` (see [[10 - Infrastructure/Server & Docker]])
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Tech Stack
|
||||||
|
|
||||||
|
| Layer | Technology |
|
||||||
|
|-------|-----------|
|
||||||
|
| Framework | Django >= 4.2 |
|
||||||
|
| Language | Python |
|
||||||
|
| Image Processing | Pillow |
|
||||||
|
| Database | Configured via env vars |
|
||||||
|
| API Docs | `API_Documentation.md` in project root |
|
||||||
|
|
||||||
|
## Django Apps / Modules
|
||||||
|
|
||||||
|
| Module | Purpose |
|
||||||
|
|--------|---------|
|
||||||
|
| `accounts` | User management, authentication |
|
||||||
|
| `events` | Event CRUD, event types, event images |
|
||||||
|
| `bookings` | Event booking system |
|
||||||
|
| `reviews` | User reviews for events |
|
||||||
|
| `ledger` | Financial / points ledger |
|
||||||
|
| `banking_operations` | Payment & banking |
|
||||||
|
| `eventify_logger` | Logging infrastructure |
|
||||||
|
| `gamification` | EP, RP, achievements, leaderboard |
|
||||||
|
|
||||||
|
## Models (Key)
|
||||||
|
- **Custom User** — extended Django user model
|
||||||
|
- **Event** — core event entity
|
||||||
|
- **EventType** — event categories
|
||||||
|
- **EventImages** — media for events
|
||||||
|
- **Booking** — event reservations
|
||||||
|
|
||||||
|
## Environment Variables
|
||||||
|
```
|
||||||
|
DJANGO_SECRET_KEY=replace-me
|
||||||
|
DJANGO_DEBUG=False
|
||||||
|
DJANGO_ALLOWED_HOSTS=localhost,127.0.0.1
|
||||||
|
```
|
||||||
|
|
||||||
|
## Accessing the Server
|
||||||
|
|
||||||
|
```bash
|
||||||
|
ssh eventify
|
||||||
|
# connects to: ubuntu@ec2-174-129-72-160.compute-1.amazonaws.com
|
||||||
|
# key: ~/.ssh/eventify_keys_21_03_2026.pem
|
||||||
|
```
|
||||||
|
|
||||||
|
## API Documentation
|
||||||
|
Full endpoint reference: `eventify_backend/API_Documentation.md`
|
||||||
|
|
||||||
|
See also: [[04 - API & Backend/API Notes]]
|
||||||
|
|
||||||
|
## Notes
|
||||||
|
|
||||||
|
## Related
|
||||||
|
- [[App - Web Frontend]]
|
||||||
|
- [[Admin - Command Center]]
|
||||||
|
- [[Partner Portal]]
|
||||||
|
- [[Mobile - Flutter]]
|
||||||
|
- [[10 - Infrastructure/Server & Docker]]
|
||||||
49
_notes/09 - Projects/Mobile - Flutter.md
Normal file
49
_notes/09 - Projects/Mobile - Flutter.md
Normal file
@@ -0,0 +1,49 @@
|
|||||||
|
# Mobile App — Flutter
|
||||||
|
|
||||||
|
**Platforms:** iOS, Android, Web, Desktop (Windows, macOS, Linux)
|
||||||
|
**Local Path:** `/Users/bshtechnologies/Documents/Eventify-frontend/`
|
||||||
|
**Version:** 1.6.1+17
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Tech Stack
|
||||||
|
|
||||||
|
| Layer | Technology |
|
||||||
|
|-------|-----------|
|
||||||
|
| Framework | Flutter |
|
||||||
|
| Language | Dart ^2.17.0 |
|
||||||
|
| State Management | Provider 6.1.2 |
|
||||||
|
| Maps | google_maps_flutter 2.5.0 |
|
||||||
|
| Calendar | table_calendar 3.2.0 |
|
||||||
|
| Location | geolocator 9.0.2 + geocoding 2.0.5 |
|
||||||
|
| Media | image_picker, video_player |
|
||||||
|
| Images | cached_network_image, flutter_svg |
|
||||||
|
| Storage | shared_preferences |
|
||||||
|
|
||||||
|
## Architecture
|
||||||
|
|
||||||
|
Feature-first modular structure:
|
||||||
|
```
|
||||||
|
lib/
|
||||||
|
├── core/ # API, auth, storage, utils, constants, theme
|
||||||
|
├── features/ # auth, events, gamification, reviews
|
||||||
|
├── screens/ # Mobile + desktop screen variants
|
||||||
|
└── widgets/ # Reusable components
|
||||||
|
```
|
||||||
|
|
||||||
|
## Feature Modules
|
||||||
|
- **Auth** — login, registration, session ([[02 - Features/Auth]])
|
||||||
|
- **Events** — listing, detail, booking, calendar ([[02 - Features/Events]])
|
||||||
|
- **Gamification** — EP, RP, leaderboard, achievements ([[02 - Features/Gamification]])
|
||||||
|
- **Reviews** — event reviews ([[02 - Features/Reviews]])
|
||||||
|
|
||||||
|
## Responsive Design
|
||||||
|
- `responsive_layout.dart` switches between mobile and desktop layouts
|
||||||
|
- Separate screen files for mobile vs desktop (e.g. `home_screen.dart` / `home_desktop_screen.dart`)
|
||||||
|
|
||||||
|
## Notes
|
||||||
|
|
||||||
|
## Related
|
||||||
|
- [[01 - Architecture/Overview]]
|
||||||
|
- [[03 - Screens/Screen Index]]
|
||||||
|
- [[Backend - Django]]
|
||||||
41
_notes/09 - Projects/Partner Portal.md
Normal file
41
_notes/09 - Projects/Partner Portal.md
Normal file
@@ -0,0 +1,41 @@
|
|||||||
|
# Partner Portal (partner.eventifyplus.com)
|
||||||
|
|
||||||
|
**Domain:** `partner.eventifyplus.com`
|
||||||
|
**Local Path:** `/Users/bshtechnologies/Documents/eventify-partner/`
|
||||||
|
**Deployment:** Vercel (Next.js standard)
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Tech Stack
|
||||||
|
|
||||||
|
| Layer | Technology |
|
||||||
|
|-------|-----------|
|
||||||
|
| Framework | Next.js 16.1.1 |
|
||||||
|
| Language | TypeScript |
|
||||||
|
| React | 19.2.3 |
|
||||||
|
| Styling | Tailwind CSS 4 + PostCSS |
|
||||||
|
| ORM | Prisma |
|
||||||
|
| Forms | react-hook-form + Zod validation |
|
||||||
|
| Analytics | PostHog |
|
||||||
|
| Charts | Recharts |
|
||||||
|
|
||||||
|
## Features
|
||||||
|
|
||||||
|
- **QR Code Scanning** — `@yudiel/react-qr-scanner` for event check-ins
|
||||||
|
- **Event Management** — partners create/manage their events
|
||||||
|
- **Reporting** — revenue & attendance analytics (Recharts)
|
||||||
|
- **Form Handling** — structured forms with react-hook-form + Zod
|
||||||
|
- **Database** — Prisma ORM integration
|
||||||
|
|
||||||
|
## Key Flows
|
||||||
|
- [ ] Document partner onboarding flow
|
||||||
|
- [ ] Document event creation by partner
|
||||||
|
- [ ] Document QR check-in flow
|
||||||
|
- [ ] Document reporting/analytics views
|
||||||
|
|
||||||
|
## Notes
|
||||||
|
|
||||||
|
## Related
|
||||||
|
- [[Backend - Django]]
|
||||||
|
- [[Admin - Command Center]]
|
||||||
|
- [[App - Web Frontend]]
|
||||||
91
_notes/10 - Infrastructure/Server & Docker.md
Normal file
91
_notes/10 - Infrastructure/Server & Docker.md
Normal file
@@ -0,0 +1,91 @@
|
|||||||
|
# Server & Docker Infrastructure
|
||||||
|
|
||||||
|
## AWS EC2 Server
|
||||||
|
|
||||||
|
| Property | Value |
|
||||||
|
|----------|-------|
|
||||||
|
| Host alias | `eventify` |
|
||||||
|
| Hostname | `ec2-174-129-72-160.compute-1.amazonaws.com` |
|
||||||
|
| User | `ubuntu` |
|
||||||
|
| SSH Key | `~/.ssh/eventify_keys_21_03_2026.pem` |
|
||||||
|
| Port | 22 (default) |
|
||||||
|
|
||||||
|
### Quick Connect
|
||||||
|
```bash
|
||||||
|
ssh eventify
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Docker Setup
|
||||||
|
|
||||||
|
All containers run on a shared Docker network: **`eventify-net`** (external, managed separately).
|
||||||
|
|
||||||
|
### Containers
|
||||||
|
|
||||||
|
| Container | Purpose | Port | Status Page |
|
||||||
|
|-----------|---------|------|-------------|
|
||||||
|
| Django Backend | API server | Proxied via Nginx | `uat.eventifyplus.com/api/` |
|
||||||
|
| Server Monitor | Uptime & health | 3002 | `status.eventifyplus.com` |
|
||||||
|
|
||||||
|
### Docker Network
|
||||||
|
```bash
|
||||||
|
# The shared external network (create if missing)
|
||||||
|
docker network create eventify-net
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Domains & URLs
|
||||||
|
|
||||||
|
| Domain | Purpose |
|
||||||
|
|--------|---------|
|
||||||
|
| `app.eventifyplus.com` | Main web app (mvnew) |
|
||||||
|
| `admin.eventifyplus.com` | Admin command center |
|
||||||
|
| `partner.eventifyplus.com` | Partner portal |
|
||||||
|
| `uat.eventifyplus.com/api/` | Backend API (UAT) |
|
||||||
|
| `prod.eventifyplus.com/api` | Backend API (Production) |
|
||||||
|
| `status.eventifyplus.com` | Server monitoring |
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Common Server Commands
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# SSH into the server
|
||||||
|
ssh eventify
|
||||||
|
|
||||||
|
# Check running containers
|
||||||
|
docker ps
|
||||||
|
|
||||||
|
# View logs for a container
|
||||||
|
docker logs <container-name> --tail 100 -f
|
||||||
|
|
||||||
|
# Restart a container
|
||||||
|
docker compose restart <service>
|
||||||
|
|
||||||
|
# Check Docker network
|
||||||
|
docker network ls
|
||||||
|
docker network inspect eventify-net
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Mail / SMTP
|
||||||
|
|
||||||
|
| Property | Value |
|
||||||
|
|----------|-------|
|
||||||
|
| Server | `mail.bshtech.net:587` |
|
||||||
|
| From | `noreply@bshtech.net` |
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Notes
|
||||||
|
- [ ] Document Nginx config and reverse proxy setup
|
||||||
|
- [ ] Document database type and connection details
|
||||||
|
- [ ] Document deployment/CI pipeline
|
||||||
|
- [ ] Map which containers run which services
|
||||||
|
|
||||||
|
## Related
|
||||||
|
- [[Backend - Django]]
|
||||||
|
- [[Server Monitor]]
|
||||||
48
_notes/10 - Infrastructure/Server Monitor.md
Normal file
48
_notes/10 - Infrastructure/Server Monitor.md
Normal file
@@ -0,0 +1,48 @@
|
|||||||
|
# Server Monitor (status.eventifyplus.com)
|
||||||
|
|
||||||
|
**Domain:** `status.eventifyplus.com`
|
||||||
|
**Local Path:** `/Users/bshtechnologies/Documents/eventify-server-monitor/`
|
||||||
|
**Container:** `eventify-server-monitor`
|
||||||
|
**Port:** 3002
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Tech Stack
|
||||||
|
|
||||||
|
| Layer | Technology |
|
||||||
|
|-------|-----------|
|
||||||
|
| Runtime | Node.js 20 (Alpine) |
|
||||||
|
| Architecture | Monorepo (client + server workspaces) |
|
||||||
|
| Build | Multi-stage Docker build |
|
||||||
|
| Client | React (built and served by server) |
|
||||||
|
|
||||||
|
## Docker Setup
|
||||||
|
|
||||||
|
**Dockerfile:** Multi-stage Node.js 20-alpine build
|
||||||
|
- Stage 1: Build client + server
|
||||||
|
- Stage 2: Production image, serves on port 3002
|
||||||
|
- Entry: `npm run --workspace=server start`
|
||||||
|
|
||||||
|
**docker-compose.yml:**
|
||||||
|
```yaml
|
||||||
|
container: eventify-server-monitor
|
||||||
|
port: 3002:3002
|
||||||
|
network: eventify-net (external)
|
||||||
|
volume: /app/data (persisted)
|
||||||
|
```
|
||||||
|
|
||||||
|
## Configuration
|
||||||
|
- App URL: `https://status.eventifyplus.com`
|
||||||
|
- SMTP: `mail.bshtech.net:587` (noreply@bshtech.net)
|
||||||
|
- SSH host mapping: `host.docker.internal` as ubuntu user
|
||||||
|
|
||||||
|
## Features
|
||||||
|
- Uptime monitoring for all Eventify services
|
||||||
|
- Performance metrics
|
||||||
|
- Alert notifications via email
|
||||||
|
|
||||||
|
## Notes
|
||||||
|
|
||||||
|
## Related
|
||||||
|
- [[Server & Docker]]
|
||||||
|
- [[09 - Projects/Backend - Django]]
|
||||||
1
_notes/Untitled.canvas
Normal file
1
_notes/Untitled.canvas
Normal file
@@ -0,0 +1 @@
|
|||||||
|
{}
|
||||||
Reference in New Issue
Block a user