diff --git a/CLAUDE.md b/CLAUDE.md new file mode 100644 index 0000000..0abd815 --- /dev/null +++ b/CLAUDE.md @@ -0,0 +1,329 @@ +## 2. Member Features + +### Member Profiles + +**Core Fields:** + +- Name, pronouns, time zone +- Avatar/photo - choose from ghosts +- Studio/organization affiliation +- Bio (rich text) +- Skills tags (searchable) +- Location (city/region) +- Social links (Mastodon, LinkedIn, etc.) +- **Offering:** What I can contribute +- **Looking For:** What I need support with + +**Privacy Controls:** + +- Public/members-only/private toggle per field +- Opt-in to member directory + +### Member Updates/Mini Blog + +- Post updates about projects, learnings, questions +- Rich text with image support +- Comments enabled +- Filter by circle or topic tags + +## 3. Events System + +### Core Features + +- RSVP with capacity limits +- Waitlist management +- Add to calendar (.ics download) +- Pre-event discussion threads +- Post-event recordings archive +- Speaker/facilitator profiles + +### Member-Proposed Events + +**Proposal Flow:** + +1. Member submits event idea via form +2. Include: Topic, format, target circle, time commitment +3. Admin quick review (spam check only) +4. Published to "Proposed Events" board +5. Members can express interest (like feature upvote pages) +6. If threshold met (e.g., 5 interested), event is scheduled +7. Proposer gets facilitator support if needed + +## 4. Resources Integration + +### Consolidating Existing Assets + +**Import and organize from:** + +- learn.weirdghosts.ca content +- Existing tools and templates +- PA curriculum materials (where appropriate) +- Case studies and examples + +**Organization Structure:** + +``` +Resources/ +├── Start Here/ +│ ├── Welcome Letter from Jennie & Eileen +│ ├── How Ghost Guild Works +│ └── Solidarity Economics Explained +├── Learning Paths/ +│ ├── Community Track → links to learn.weirdghosts.ca +│ ├── Founder Track → practical tools +│ └── Practitioner Track → advanced resources +├── Templates & Tools/ +│ ├── Governance/ +│ ├── Financial/ +│ ├── Operations/ +│ └── Legal/ +├── Case Studies/ +│ └── Member stories and examples +└── External Resources/ + └── Curated links and recommendations +``` + +### Resource Features + +- Tag by circle relevance (but accessible to all) +- Download tracking for impact metrics +- Version control for templates +- Comment threads on resources +- "Request a resource" feature + +## 5. Peer Support System + +### Cal.com Integration for 1:1s + +**Setup:** + +- Each member can enable peer support availability +- Set their own hours/frequency +- Cal.com handles scheduling +- Types of sessions: + - Peer support (30 min) + - Co-founder check-in (45 min) + - Practitioner office hours (60 min) + +**Matching System:** + +- Simple questionnaire about current needs +- Suggest 3 potential peers based on: + - Complementary skills/needs + - Time zone compatibility + - Circle alignment (optional) +- Book directly via Cal.com links + +## 6. Dashboard Design + +### Personalized Sections + +**Welcome Block:** + +- "Welcome back, [Name]" +- Your circle: [Circle] | Your contribution: $X/month +- Quick stats: Days as member, events attended, peers met + +**Community Pulse:** + +- Recent member updates (mini blog posts) +- Upcoming events this week +- New resources added +- New members to welcome + +**Your Activity:** + +- Your upcoming events +- Scheduled peer sessions +- Recent discussions you're in +- Resources you've bookmarked + +**Take Action:** + +- Post an update +- Propose an event +- Book a peer session +- Browse resources +- Update profile + +**Impact Metrics:** + +- Total solidarity spots funded +- Events hosted this month +- Active members this week +- Resources shared + +## 7. Collaborative Tools + +### Etherpad Integration + +**Use Cases:** + +- Meeting notes templates +- Collaborative resource creation +- Event planning documents +- Shared learning notes + +**Implementation:** + +- Self-hosted Etherpad instance +- SSO with Ghost Guild accounts +- Auto-save and version history +- Export to multiple formats +- Embed in event pages for notes + +### Living Documents + +- Community-maintained guides +- Glossaries and definitions +- Frequently asked questions +- Best practices collections + +## 8. Technical Infrastructure + +### Notification System + +**Channels:** + +- Email (via Resend) +- In-app notifications +- Slack integration via bot + +**Configurable Preferences:** + +- Event reminders +- New resources in your area +- Peer session invitations +- Member updates digest +- Community announcements + +### Search & Discovery + +- Full-text search across: + - Resources + - Member profiles + - Event descriptions + - Member updates +- Filter by circle, tags, date +- Save searches for alerts + +### Analytics & Reporting + +- Member engagement metrics +- Resource usage stats +- Event attendance patterns +- Contribution distribution +- Circle movement tracking + +## 9. Content for Launch + +### Essential Content Pieces + +1. **Welcome Video** - Jennie & Eileen introduce Ghost Guild +2. **How This Works** - Clear explanation of circles and contributions +3. **Circle Guides** - What to expect in each circle +4. **Solidarity Economics** - Practical examples from gaming +5. **Getting Started Checklist** - First week actions + +### Pre-Populated Content + +- 10-15 essential resources per circle +- 3-5 upcoming events scheduled +- Sample member updates to show activity +- FAQ based on pre-registration questions + +## 10. Launch Strategy + +### Soft Launch (Week Before) + +- Invite 10-15 friendly testers +- Each from different backgrounds/circles +- Gather feedback on: + - Onboarding flow + - Resource organization + - Event system + - Profile creation + +### Launch Week + +**Day 1-2:** PA alumni and close network + +- Personal invitations +- Extra support available +- Gather testimonials + +**Day 3-4:** Gamma Space announcement + +- Post in relevant channels +- Host info session + +**Day 5-7:** Public launch + +- Email pre-registration list +- Social media announcement +- Open registration + +### Success Metrics + +**Week 1:** + +- 30 members across all circles +- 80% complete profiles +- 50% attend first event + +**Month 1:** + +- 75 active members +- 5 member-proposed events +- 20 peer sessions booked +- 90% Slack participation + +## 11. Ongoing Operations + +### Weekly Tasks + +- Review member proposals for events +- Process Gamma Space channel access +- Update resource library +- Send member spotlight + +### Monthly Tasks + +- Impact report to members +- Review and adjust contribution distribution +- Plan next month's events +- Gather member feedback + +### Quarterly Reviews + +- Assess circle definitions +- Evaluate pricing model +- Review platform features +- Plan new initiatives + +--- + +## Implementation Priority Order + +### Must Have for Launch + +1. Payment processing (Helcim) +2. Basic Slack automation +3. Member dashboard +4. Simple resource library +5. Event listing and RSVP + +### Nice to Have for Launch + +7. Member profiles +8. Peer matching system +9. Cal.com integration +10. Member updates/blog + +### Can Build Post-Launch + +11. Etherpad integration +12. Member-proposed events +13. Advanced search +14. Analytics dashboard +15. Monthly themes diff --git a/app/app.config.ts b/app/app.config.ts index 51f28f0..363e07f 100644 --- a/app/app.config.ts +++ b/app/app.config.ts @@ -1,8 +1,13 @@ export default defineAppConfig({ ui: { colors: { - primary: "pink", - neutral: "zinc", + primary: "emerald", + neutral: "stone", + }, + formField: { + slots: { + label: "block font-medium text-stone-200", + }, }, }, }); diff --git a/app/assets/css/main.css b/app/assets/css/main.css index a5e24e1..22cb675 100644 --- a/app/assets/css/main.css +++ b/app/assets/css/main.css @@ -2,13 +2,145 @@ @import "tailwindcss"; @import "@nuxt/ui"; -@theme { +@theme static { /* Font families */ --font-sans: "Inter", sans-serif; --font-body: "Inter", sans-serif; --font-mono: "Ubuntu Mono", monospace; --font-display: "NB Television Pro", monospace; + /* Ethereal color palette - grays, blacks, minimal color */ + --color-ghost-50: #f0f0f0; + --color-ghost-100: #d0d0d0; + --color-ghost-200: #b0b0b0; + --color-ghost-300: #8a8a8a; + --color-ghost-400: #6a6a6a; + --color-ghost-500: #4a4a4a; + --color-ghost-600: #3a3a3a; + --color-ghost-700: #2a2a2a; + --color-ghost-800: #1a1a1a; + --color-ghost-900: #0a0a0a; + + /* Subtle accent - barely visible blue-gray */ + --color-whisper-50: #d4dae6; + --color-whisper-100: #a8b3c7; + --color-whisper-200: #8491a8; + --color-whisper-300: #687291; + --color-whisper-400: #4f5d7a; + --color-whisper-500: #3a4964; + --color-whisper-600: #2f3b52; + --color-whisper-700: #252d40; + --color-whisper-800: #1a1f2e; + --color-whisper-900: #0f1419; + /* Sparkle accent */ + --color-sparkle-50: #fafafa; + --color-sparkle-100: #f0f0f0; + --color-sparkle-200: #e8e8e8; + --color-sparkle-300: #d0d0d0; + --color-sparkle-400: #c0c0c0; + --color-sparkle-500: #a0a0a0; + --color-sparkle-600: #808080; + --color-sparkle-700: #606060; + --color-sparkle-800: #404040; + --color-sparkle-900: #202020; +} + +/* Global ethereal background */ +:root { + --ethereal-bg: radial-gradient(circle at 20% 80%, rgba(232, 232, 232, 0.03) 0%, transparent 50%), + radial-gradient(circle at 80% 20%, rgba(232, 232, 232, 0.02) 0%, transparent 50%), + radial-gradient(circle at 40% 40%, rgba(232, 232, 232, 0.01) 0%, transparent 50%); + + --halftone-pattern: radial-gradient(circle, rgba(255,255,255,0.1) 1px, transparent 1px); + --halftone-size: 8px 8px; +} + +html { + background: var(--color-ghost-900); + color: var(--color-ghost-200); +} + +body { + background: var(--ethereal-bg), var(--color-ghost-900); + background-attachment: fixed; +} + +/* Halftone texture overlay */ +.halftone-texture { + position: relative; +} + +.halftone-texture::before { + content: ''; + position: absolute; + top: 0; + left: 0; + right: 0; + bottom: 0; + background: var(--halftone-pattern); + background-size: var(--halftone-size); + opacity: 0.1; + pointer-events: none; +} + +/* Sparkle effects */ +@keyframes sparkle { + 0%, 100% { opacity: 0.3; transform: scale(0.8); } + 50% { opacity: 1; transform: scale(1.2); } +} + +@keyframes twinkle { + 0%, 100% { opacity: 0.2; } + 25% { opacity: 0.8; } + 75% { opacity: 0.4; } +} + +.sparkle-field { + position: relative; + overflow: hidden; +} + +.sparkle-field::after { + content: ''; + position: absolute; + top: 0; + left: 0; + right: 0; + bottom: 0; + background-image: + radial-gradient(circle at 10% 20%, var(--color-sparkle-200) 1px, transparent 1px), + radial-gradient(circle at 90% 80%, var(--color-sparkle-400) 1px, transparent 1px), + radial-gradient(circle at 30% 70%, var(--color-sparkle-200) 0.5px, transparent 0.5px), + radial-gradient(circle at 70% 30%, var(--color-sparkle-400) 0.5px, transparent 0.5px), + radial-gradient(circle at 50% 10%, var(--color-sparkle-200) 1px, transparent 1px), + radial-gradient(circle at 20% 90%, var(--color-sparkle-400) 0.5px, transparent 0.5px); + background-size: 200px 200px, 300px 300px, 150px 150px, 250px 250px, 180px 180px, 220px 220px; + animation: twinkle 4s infinite ease-in-out; + pointer-events: none; + opacity: 0.6; +} + +/* Ethereal glow effects */ +.ethereal-glow { + box-shadow: + 0 0 20px rgba(232, 232, 232, 0.1), + 0 0 40px rgba(232, 232, 232, 0.05), + inset 0 1px 0 rgba(255, 255, 255, 0.1); +} + +.ethereal-text { + text-shadow: 0 0 10px rgba(232, 232, 232, 0.3); +} + +/* Dithered gradients */ +.dithered-bg { + background: + linear-gradient(45deg, var(--color-ghost-800) 25%, transparent 25%), + linear-gradient(-45deg, var(--color-ghost-800) 25%, transparent 25%), + linear-gradient(45deg, transparent 75%, var(--color-ghost-700) 75%), + linear-gradient(-45deg, transparent 75%, var(--color-ghost-700) 75%); + background-size: 4px 4px; + background-position: 0 0, 0 2px, 2px -2px, -2px 0px; } diff --git a/app/components/AppFooter.vue b/app/components/AppFooter.vue index 74928a8..7f35a63 100644 --- a/app/components/AppFooter.vue +++ b/app/components/AppFooter.vue @@ -1,288 +1,31 @@ \ No newline at end of file +const currentYear = new Date().getFullYear(); + diff --git a/app/components/AppNavigation.vue b/app/components/AppNavigation.vue index 5bbeb7e..f7b1473 100644 --- a/app/components/AppNavigation.vue +++ b/app/components/AppNavigation.vue @@ -1,142 +1,191 @@ + + diff --git a/app/components/PageHeader.vue b/app/components/PageHeader.vue index b756f47..a5646cc 100644 --- a/app/components/PageHeader.vue +++ b/app/components/PageHeader.vue @@ -1,65 +1,108 @@ \ No newline at end of file + return "text-white"; +}); + diff --git a/app/components/PrivacyToggle.vue b/app/components/PrivacyToggle.vue new file mode 100644 index 0000000..8b0ca9a --- /dev/null +++ b/app/components/PrivacyToggle.vue @@ -0,0 +1,47 @@ + + + diff --git a/app/components/UpdateCard.vue b/app/components/UpdateCard.vue new file mode 100644 index 0000000..af76bc1 --- /dev/null +++ b/app/components/UpdateCard.vue @@ -0,0 +1,189 @@ + + + + + diff --git a/app/components/UpdateForm.vue b/app/components/UpdateForm.vue new file mode 100644 index 0000000..286e77b --- /dev/null +++ b/app/components/UpdateForm.vue @@ -0,0 +1,182 @@ + + + + + diff --git a/app/layouts/default.vue b/app/layouts/default.vue index befc6f9..07411f7 100644 --- a/app/layouts/default.vue +++ b/app/layouts/default.vue @@ -1,7 +1,35 @@ \ No newline at end of file + diff --git a/app/pages/about.vue b/app/pages/about.vue index 44ddd0e..cbc7469 100644 --- a/app/pages/about.vue +++ b/app/pages/about.vue @@ -1,306 +1,278 @@