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:
2026-04-06 22:04:06 +05:30
parent b24df66b31
commit b8fcd29aff
51 changed files with 27700 additions and 11 deletions

View File

@@ -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
View File

@@ -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
View 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
View File

@@ -0,0 +1,7 @@
[
"dataview",
"obsidian-kanban",
"templater-obsidian",
"calendar",
"obsidian-tasks-plugin"
]

23
.obsidian/core-plugins.json vendored Normal file
View 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
}

View File

@@ -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
View File

@@ -0,0 +1 @@
{}

1
_notes/.obsidian/appearance.json vendored Normal file
View File

@@ -0,0 +1 @@
{}

View File

@@ -0,0 +1,7 @@
[
"dataview",
"obsidian-kanban",
"templater-obsidian",
"calendar",
"obsidian-tasks-plugin"
]

33
_notes/.obsidian/core-plugins.json vendored Normal file
View 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
View 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
}

View 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

File diff suppressed because it is too large Load Diff

View 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

File diff suppressed because one or more lines are too long

View 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
}

View 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: ")";
}

File diff suppressed because one or more lines are too long

View 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
}

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View 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
}

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View 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
}

View 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
View 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"
}
}

View 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
```

View 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/
```

View 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]]

View 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)

View 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]]

View 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]]

View 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]]

View 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]]

View 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

View 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]]

View 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
- [ ]

View 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

View File

@@ -0,0 +1,91 @@
# Phase 24 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`

View 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
```

View 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

View 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

View 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]]

View 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]]

View 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]]

View 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]]

View 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]]

View 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]]

View 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
View File

@@ -0,0 +1 @@
{}