From a64b8a48ad4faa54784f1f625a654eaef4fcd9a5 Mon Sep 17 00:00:00 2001 From: Ndevu12 Date: Fri, 16 Jan 2026 14:11:26 +0200 Subject: [PATCH 1/4] feat: Complete website redesign with Django Rwanda branding - Configure yarn as package manager - Add ESLint configuration with node_modules ignored - Create Django Rwanda branded icons and placeholders - Implement new color scheme (Django green, Rwanda gold, sky blue) - Optimize Hero section layout and spacing - Add GitHub Pages deployment workflow - Configure Next.js for static export --- .github/workflows/deploy.yml | 62 + .gitignore | 58 +- .yarnrc.yml | 1 + README.md | 389 +- app/auth/login/page.tsx | 97 + app/auth/signup/page.tsx | 150 + app/community/code-of-conduct/page.tsx | 76 + app/community/contribute/page.tsx | 97 + app/community/join/page.tsx | 90 + app/community/page.tsx | 89 + app/community/sponsorship/page.tsx | 129 + app/contact/page.tsx | 121 + app/events/[id]/page.tsx | 174 + app/events/page.tsx | 79 + app/get-started/page.tsx | 129 + app/globals.css | 141 + app/layout.tsx | 54 + app/page.tsx | 23 + app/privacy/page.tsx | 81 + app/register/events/[id]/page.tsx | 118 + app/register/workshops/page.tsx | 100 + app/resources/funding-directory/page.tsx | 81 + app/resources/mentorship/page.tsx | 119 + app/resources/page.tsx | 67 + app/resources/problem-solutions/page.tsx | 103 + app/resources/startup-toolkit/page.tsx | 86 + app/sitemap/page.tsx | 102 + app/terms/page.tsx | 87 + app/workshops/[id]/page.tsx | 161 + app/workshops/page.tsx | 83 + components.json | 21 + components/community-section.tsx | 45 + components/events-section.tsx | 67 + components/footer.tsx | 148 + components/header.tsx | 87 + components/hero.tsx | 88 + components/open-source-section.tsx | 76 + components/resources-section.tsx | 59 + components/theme-provider.tsx | 11 + components/ui/accordion.tsx | 66 + components/ui/alert-dialog.tsx | 157 + components/ui/alert.tsx | 66 + components/ui/aspect-ratio.tsx | 11 + components/ui/avatar.tsx | 53 + components/ui/badge.tsx | 46 + components/ui/breadcrumb.tsx | 109 + components/ui/button-group.tsx | 83 + components/ui/button.tsx | 60 + components/ui/calendar.tsx | 213 ++ components/ui/card.tsx | 92 + components/ui/carousel.tsx | 241 ++ components/ui/chart.tsx | 353 ++ components/ui/checkbox.tsx | 32 + components/ui/collapsible.tsx | 33 + components/ui/command.tsx | 184 + components/ui/context-menu.tsx | 252 ++ components/ui/dialog.tsx | 143 + components/ui/drawer.tsx | 135 + components/ui/dropdown-menu.tsx | 257 ++ components/ui/empty.tsx | 104 + components/ui/field.tsx | 244 ++ components/ui/form.tsx | 167 + components/ui/hover-card.tsx | 44 + components/ui/input-group.tsx | 169 + components/ui/input-otp.tsx | 77 + components/ui/input.tsx | 21 + components/ui/item.tsx | 193 + components/ui/kbd.tsx | 28 + components/ui/label.tsx | 24 + components/ui/menubar.tsx | 276 ++ components/ui/navigation-menu.tsx | 166 + components/ui/pagination.tsx | 127 + components/ui/popover.tsx | 48 + components/ui/progress.tsx | 31 + components/ui/radio-group.tsx | 45 + components/ui/resizable.tsx | 56 + components/ui/scroll-area.tsx | 58 + components/ui/select.tsx | 185 + components/ui/separator.tsx | 28 + components/ui/sheet.tsx | 139 + components/ui/sidebar.tsx | 726 ++++ components/ui/skeleton.tsx | 13 + components/ui/slider.tsx | 63 + components/ui/sonner.tsx | 25 + components/ui/spinner.tsx | 16 + components/ui/switch.tsx | 31 + components/ui/table.tsx | 116 + components/ui/tabs.tsx | 66 + components/ui/textarea.tsx | 18 + components/ui/toast.tsx | 129 + components/ui/toaster.tsx | 35 + components/ui/toggle-group.tsx | 73 + components/ui/toggle.tsx | 47 + components/ui/tooltip.tsx | 61 + components/ui/use-mobile.tsx | 19 + components/ui/use-toast.ts | 191 + components/workshops-section.tsx | 75 + eslint.config.mjs | 29 + hooks/use-mobile.ts | 19 + hooks/use-toast.ts | 191 + lib/constants.ts | 154 + lib/utils.ts | 6 + next.config.mjs | 22 + package.json | 78 + postcss.config.mjs | 8 + public/advanced-programming.jpg | Bin 0 -> 272532 bytes public/api-development.jpg | Bin 0 -> 115685 bytes public/apple-icon.svg | 17 + public/django-web-development.jpg | Bin 0 -> 85520 bytes public/favicon.svg | 17 + public/full-stack-development.jpg | Bin 0 -> 141146 bytes public/icon-dark-32x32.svg | 17 + public/icon-light-32x32.svg | 17 + public/icon.svg | 17 + public/placeholder-user.jpg | Bin 0 -> 1635 bytes public/placeholder-user.svg | 14 + public/placeholder.svg | 45 + styles/globals.css | 125 + tsconfig.json | 41 + yarn.lock | 4193 ++++++++++++++++++++++ 120 files changed, 15259 insertions(+), 20 deletions(-) create mode 100644 .github/workflows/deploy.yml create mode 100644 .yarnrc.yml create mode 100644 app/auth/login/page.tsx create mode 100644 app/auth/signup/page.tsx create mode 100644 app/community/code-of-conduct/page.tsx create mode 100644 app/community/contribute/page.tsx create mode 100644 app/community/join/page.tsx create mode 100644 app/community/page.tsx create mode 100644 app/community/sponsorship/page.tsx create mode 100644 app/contact/page.tsx create mode 100644 app/events/[id]/page.tsx create mode 100644 app/events/page.tsx create mode 100644 app/get-started/page.tsx create mode 100644 app/globals.css create mode 100644 app/layout.tsx create mode 100644 app/page.tsx create mode 100644 app/privacy/page.tsx create mode 100644 app/register/events/[id]/page.tsx create mode 100644 app/register/workshops/page.tsx create mode 100644 app/resources/funding-directory/page.tsx create mode 100644 app/resources/mentorship/page.tsx create mode 100644 app/resources/page.tsx create mode 100644 app/resources/problem-solutions/page.tsx create mode 100644 app/resources/startup-toolkit/page.tsx create mode 100644 app/sitemap/page.tsx create mode 100644 app/terms/page.tsx create mode 100644 app/workshops/[id]/page.tsx create mode 100644 app/workshops/page.tsx create mode 100644 components.json create mode 100644 components/community-section.tsx create mode 100644 components/events-section.tsx create mode 100644 components/footer.tsx create mode 100644 components/header.tsx create mode 100644 components/hero.tsx create mode 100644 components/open-source-section.tsx create mode 100644 components/resources-section.tsx create mode 100644 components/theme-provider.tsx create mode 100644 components/ui/accordion.tsx create mode 100644 components/ui/alert-dialog.tsx create mode 100644 components/ui/alert.tsx create mode 100644 components/ui/aspect-ratio.tsx create mode 100644 components/ui/avatar.tsx create mode 100644 components/ui/badge.tsx create mode 100644 components/ui/breadcrumb.tsx create mode 100644 components/ui/button-group.tsx create mode 100644 components/ui/button.tsx create mode 100644 components/ui/calendar.tsx create mode 100644 components/ui/card.tsx create mode 100644 components/ui/carousel.tsx create mode 100644 components/ui/chart.tsx create mode 100644 components/ui/checkbox.tsx create mode 100644 components/ui/collapsible.tsx create mode 100644 components/ui/command.tsx create mode 100644 components/ui/context-menu.tsx create mode 100644 components/ui/dialog.tsx create mode 100644 components/ui/drawer.tsx create mode 100644 components/ui/dropdown-menu.tsx create mode 100644 components/ui/empty.tsx create mode 100644 components/ui/field.tsx create mode 100644 components/ui/form.tsx create mode 100644 components/ui/hover-card.tsx create mode 100644 components/ui/input-group.tsx create mode 100644 components/ui/input-otp.tsx create mode 100644 components/ui/input.tsx create mode 100644 components/ui/item.tsx create mode 100644 components/ui/kbd.tsx create mode 100644 components/ui/label.tsx create mode 100644 components/ui/menubar.tsx create mode 100644 components/ui/navigation-menu.tsx create mode 100644 components/ui/pagination.tsx create mode 100644 components/ui/popover.tsx create mode 100644 components/ui/progress.tsx create mode 100644 components/ui/radio-group.tsx create mode 100644 components/ui/resizable.tsx create mode 100644 components/ui/scroll-area.tsx create mode 100644 components/ui/select.tsx create mode 100644 components/ui/separator.tsx create mode 100644 components/ui/sheet.tsx create mode 100644 components/ui/sidebar.tsx create mode 100644 components/ui/skeleton.tsx create mode 100644 components/ui/slider.tsx create mode 100644 components/ui/sonner.tsx create mode 100644 components/ui/spinner.tsx create mode 100644 components/ui/switch.tsx create mode 100644 components/ui/table.tsx create mode 100644 components/ui/tabs.tsx create mode 100644 components/ui/textarea.tsx create mode 100644 components/ui/toast.tsx create mode 100644 components/ui/toaster.tsx create mode 100644 components/ui/toggle-group.tsx create mode 100644 components/ui/toggle.tsx create mode 100644 components/ui/tooltip.tsx create mode 100644 components/ui/use-mobile.tsx create mode 100644 components/ui/use-toast.ts create mode 100644 components/workshops-section.tsx create mode 100644 eslint.config.mjs create mode 100644 hooks/use-mobile.ts create mode 100644 hooks/use-toast.ts create mode 100644 lib/constants.ts create mode 100644 lib/utils.ts create mode 100644 next.config.mjs create mode 100644 package.json create mode 100644 postcss.config.mjs create mode 100644 public/advanced-programming.jpg create mode 100644 public/api-development.jpg create mode 100644 public/apple-icon.svg create mode 100644 public/django-web-development.jpg create mode 100644 public/favicon.svg create mode 100644 public/full-stack-development.jpg create mode 100644 public/icon-dark-32x32.svg create mode 100644 public/icon-light-32x32.svg create mode 100644 public/icon.svg create mode 100644 public/placeholder-user.jpg create mode 100644 public/placeholder-user.svg create mode 100644 public/placeholder.svg create mode 100644 styles/globals.css create mode 100644 tsconfig.json create mode 100644 yarn.lock diff --git a/.github/workflows/deploy.yml b/.github/workflows/deploy.yml new file mode 100644 index 0000000..7cb15c7 --- /dev/null +++ b/.github/workflows/deploy.yml @@ -0,0 +1,62 @@ +name: Deploy to GitHub Pages + +on: + push: + branches: + - develop + pull_request: + branches: + - develop + workflow_dispatch: + +permissions: + contents: read + pages: write + id-token: write + +concurrency: + group: "pages" + cancel-in-progress: false + +jobs: + build: + runs-on: ubuntu-latest + steps: + - name: Checkout + uses: actions/checkout@v4 + + - name: Setup Node.js + uses: actions/setup-node@v4 + with: + node-version: '20' + cache: 'yarn' + + - name: Setup Pages + uses: actions/configure-pages@v4 + with: + static_site_generator: next + + - name: Install dependencies + run: yarn install --frozen-lockfile + + - name: Build with Next.js + run: yarn build + env: + NODE_ENV: production + + - name: Upload artifact + uses: actions/upload-pages-artifact@v3 + with: + path: ./out + + deploy: + environment: + name: github-pages + url: ${{ steps.deployment.outputs.page_url }} + runs-on: ubuntu-latest + needs: build + if: github.ref == 'refs/heads/develop' + steps: + - name: Deploy to GitHub Pages + id: deployment + uses: actions/deploy-pages@v4 diff --git a/.gitignore b/.gitignore index 493e69b..f8f349c 100644 --- a/.gitignore +++ b/.gitignore @@ -1,18 +1,40 @@ -# This .gitignore is appropriate for repositories deployed to GitHub Pages and using -# a Gemfile as specified at https://github.com/github/pages-gem#conventional - -# Basic Jekyll gitignores (synchronize to Jekyll.gitignore) -_site/ -.sass-cache/ -.jekyll-cache/ -.jekyll-metadata - -# Additional Ruby/bundler ignore for when you run: bundle install -/vendor - -# Specific ignore for GitHub Pages -# GitHub Pages will always use its own deployed version of pages-gem -# This means GitHub Pages will NOT use your Gemfile.lock and therefore it is -# counterproductive to check this file into the repository. -# Details at https://github.com/github/pages-gem/issues/768 -Gemfile.lock +# See https://help.github.com/articles/ignoring-files/ for more about ignoring files. + +# dependencies +/node_modules + +# Yarn +.pnp.* +.yarn/* +!.yarn/patches +!.yarn/plugins +!.yarn/releases +!.yarn/sdks +!.yarn/versions + +# next.js +/.next/ +/out/ + +# production +/build + +# debug +npm-debug.log* +yarn-debug.log* +yarn-error.log* +.pnpm-debug.log* + +# lock files (using yarn) +package-lock.json +pnpm-lock.yaml + +# env files +.env* + +# vercel +.vercel + +# typescript +*.tsbuildinfo +next-env.d.ts \ No newline at end of file diff --git a/.yarnrc.yml b/.yarnrc.yml new file mode 100644 index 0000000..3186f3f --- /dev/null +++ b/.yarnrc.yml @@ -0,0 +1 @@ +nodeLinker: node-modules diff --git a/README.md b/README.md index cb44bc8..f713d67 100644 --- a/README.md +++ b/README.md @@ -1,2 +1,387 @@ -# Django-Rwanda-website -A website for the Django Rwanda Community +# Django Rwanda Community Website + +
+ Django Rwanda Logo + + **Empowering African Developers Through Django** + + [![Next.js](https://img.shields.io/badge/Next.js-16.0-black?style=flat-square&logo=next.js)](https://nextjs.org/) + [![React](https://img.shields.io/badge/React-19.2-61DAFB?style=flat-square&logo=react)](https://react.dev/) + [![TypeScript](https://img.shields.io/badge/TypeScript-5.0-3178C6?style=flat-square&logo=typescript)](https://www.typescriptlang.org/) + [![Tailwind CSS](https://img.shields.io/badge/Tailwind-3.4-38B2AC?style=flat-square&logo=tailwind-css)](https://tailwindcss.com/) + [![License](https://img.shields.io/badge/License-MIT-green?style=flat-square)](LICENSE) + + [Live Demo](https://djangorwanda.dev) • [Report Bug](https://github.com/djangorwanda/Django-Rwanda-website/issues) • [Request Feature](https://github.com/djangorwanda/Django-Rwanda-website/issues) +
+ +--- + +## 📖 About + +The Django Rwanda Community website is a modern, full-featured platform built to connect, educate, and empower African developers passionate about Django and web development. It serves as the central hub for the Django Rwanda community, featuring workshops, events, open-source projects, and resources for entrepreneurs. + +### 🎯 Mission + +> *Django Rwanda Community is dedicated to fostering a vibrant, inclusive ecosystem of developers across Africa. We believe in the power of community, collaboration, and open-source innovation to solve local challenges and create global opportunities.* + +### 📊 Community Stats + +- **500+** Community Members +- **50+** Events Hosted +- **20+** Open Source Projects + +--- + +## ✨ Features + +### 🏠 **Homepage** +- Modern hero section with animated backgrounds +- Community mission and values showcase +- Featured workshops carousel +- Upcoming events listing +- Open-source projects showcase +- Entrepreneur resources section + +### 👥 **Community** +- **Join Us** - Membership registration with benefits overview +- **Code of Conduct** - Community guidelines and standards +- **Contribute** - Guidelines for contributing to the community +- **Sponsorship** - Partnership opportunities for organizations + +### 📚 **Workshops & Learning** +- Comprehensive Django workshops (Beginner to Advanced) +- Workshop catalog with filtering by skill level +- Detailed workshop pages with curriculum +- Registration system for workshops + +**Available Workshops:** +| Workshop | Level | Duration | +|----------|-------|----------| +| Django Fundamentals | Beginner | 4 weeks | +| Advanced Django Patterns | Intermediate | 6 weeks | +| Building APIs with Django REST | Intermediate | 4 weeks | +| Full-Stack Django & React | Advanced | 8 weeks | + +### 📅 **Events & Meetups** +- Monthly meetups in Kigali +- Quarterly bootcamps +- Open Source Contribution Days +- Event details with registration +- Location and attendee information + +### 💻 **Open Source** +Featured community projects: +- **Django-Africa** - Toolkit for localized Django apps for African markets +- **Swahili CMS** - Content management for African media outlets +- **Local Commerce** - E-commerce platform for African small businesses + +### 🚀 **Resources for Entrepreneurs** +- **Startup Toolkit** - Essential resources for launching tech startups +- **Funding Directory** - Investors, grants, and accelerators +- **Mentorship Network** - Connect with experienced entrepreneurs +- **Local Problem Solutions** - Ideas for African community challenges + +### 🔐 **Authentication** +- User registration with interest selection +- Social sign-up (Google, GitHub) +- Secure login system +- Terms of Service and Privacy Policy + +### 📱 **Additional Pages** +- Contact page with form +- Privacy Policy +- Terms of Service +- Sitemap +- Event registration +- Workshop registration + +--- + +## 🛠️ Tech Stack + +### Core Framework +- **[Next.js 16](https://nextjs.org/)** - React framework with App Router +- **[React 19](https://react.dev/)** - UI library with latest features +- **[TypeScript](https://www.typescriptlang.org/)** - Type-safe JavaScript + +### Styling & UI +- **[Tailwind CSS](https://tailwindcss.com/)** - Utility-first CSS +- **[Radix UI](https://www.radix-ui.com/)** - Accessible component primitives +- **[Lucide React](https://lucide.dev/)** - Beautiful icons +- **[tailwindcss-animate](https://github.com/jamiebuilds/tailwindcss-animate)** - Animation utilities + +### Forms & Validation +- **[React Hook Form](https://react-hook-form.com/)** - Performant form handling +- **[@hookform/resolvers](https://github.com/react-hook-form/resolvers)** - Validation resolvers + +### UI Components +- **[cmdk](https://cmdk.paco.me/)** - Command palette +- **[Embla Carousel](https://www.embla-carousel.com/)** - Carousel component +- **[Recharts](https://recharts.org/)** - Charting library +- **[Sonner](https://sonner.emilkowal.ski/)** - Toast notifications +- **[Vaul](https://vaul.emilkowal.ski/)** - Drawer component +- **[React Day Picker](https://react-day-picker.js.org/)** - Date picker + +### Utilities +- **[date-fns](https://date-fns.org/)** - Date manipulation +- **[clsx](https://github.com/lukeed/clsx)** - Class name utility +- **[tailwind-merge](https://github.com/dcastil/tailwind-merge)** - Merge Tailwind classes +- **[class-variance-authority](https://cva.style/)** - Component variants + +### Analytics & Monitoring +- **[@vercel/analytics](https://vercel.com/analytics)** - Web analytics + +--- + +## 📁 Project Structure + +``` +django-rwanda-website/ +├── app/ # Next.js App Router pages +│ ├── page.tsx # Homepage +│ ├── layout.tsx # Root layout +│ ├── globals.css # Global styles +│ ├── auth/ # Authentication pages +│ │ ├── login/ +│ │ └── signup/ +│ ├── community/ # Community section +│ │ ├── page.tsx +│ │ ├── code-of-conduct/ +│ │ ├── contribute/ +│ │ ├── join/ +│ │ └── sponsorship/ +│ ├── contact/ # Contact page +│ ├── events/ # Events section +│ │ ├── page.tsx +│ │ └── [id]/ # Dynamic event pages +│ ├── get-started/ # Onboarding page +│ ├── privacy/ # Privacy policy +│ ├── register/ # Registration flows +│ │ ├── events/ +│ │ └── workshops/ +│ ├── resources/ # Entrepreneur resources +│ │ ├── page.tsx +│ │ ├── funding-directory/ +│ │ ├── mentorship/ +│ │ ├── problem-solutions/ +│ │ └── startup-toolkit/ +│ ├── sitemap/ # Sitemap +│ ├── terms/ # Terms of service +│ └── workshops/ # Workshops section +│ ├── page.tsx +│ └── [id]/ # Dynamic workshop pages +├── components/ # React components +│ ├── ui/ # Reusable UI components (50+) +│ ├── header.tsx # Site header +│ ├── footer.tsx # Site footer +│ ├── hero.tsx # Homepage hero +│ ├── community-section.tsx # Community showcase +│ ├── events-section.tsx # Events showcase +│ ├── workshops-section.tsx # Workshops showcase +│ ├── open-source-section.tsx # Open source projects +│ ├── resources-section.tsx # Resources showcase +│ └── theme-provider.tsx # Theme context +├── hooks/ # Custom React hooks +│ ├── use-mobile.ts # Mobile detection +│ └── use-toast.ts # Toast notifications +├── lib/ # Utilities +│ ├── constants.ts # Site content/data +│ └── utils.ts # Helper functions +├── public/ # Static assets +└── styles/ # Additional styles + └── globals.css +``` + +--- + +## 🚀 Getting Started + +### Prerequisites + +- **Node.js** 18.17 or later +- **Yarn** (recommended) or npm + +### Installation + +1. **Clone the repository** + ```bash + git clone https://github.com/djangorwanda/Django-Rwanda-website.git + cd Django-Rwanda-website + ``` + +2. **Install dependencies** + ```bash + yarn install + ``` + +3. **Run the development server** + ```bash + yarn dev + ``` + +4. **Open your browser** + + Navigate to [http://localhost:3000](http://localhost:3000) + +### Available Scripts + +| Command | Description | +|---------|-------------| +| `yarn dev` | Start development server | +| `yarn build` | Build for production | +| `yarn start` | Start production server | +| `yarn lint` | Run ESLint | + +--- + +## 🎨 UI Components + +The project includes a comprehensive UI component library built with Radix UI primitives and styled with Tailwind CSS: + +
+View all 50+ UI components + +- Accordion +- Alert & Alert Dialog +- Aspect Ratio +- Avatar +- Badge +- Breadcrumb +- Button & Button Group +- Calendar +- Card +- Carousel +- Chart +- Checkbox +- Collapsible +- Command (cmdk) +- Context Menu +- Dialog +- Drawer +- Dropdown Menu +- Empty State +- Field +- Form +- Hover Card +- Input & Input Group +- Input OTP +- Item +- Kbd +- Label +- Menubar +- Navigation Menu +- Pagination +- Popover +- Progress +- Radio Group +- Resizable Panels +- Scroll Area +- Select +- Separator +- Sheet +- Sidebar +- Skeleton +- Slider +- Sonner (Toast) +- Spinner +- Switch +- Table +- Tabs +- Textarea +- Toast & Toaster +- Toggle & Toggle Group +- Tooltip + +
+ +--- + +## 🌐 Environment Variables + +Create a `.env.local` file in the root directory: + +```env +# Analytics (optional) +NEXT_PUBLIC_VERCEL_ANALYTICS_ID=your-analytics-id + +# Add other environment variables as needed +``` + +--- + +## 📦 Deployment + +### Vercel (Recommended) + +The easiest way to deploy is using [Vercel](https://vercel.com): + +[![Deploy with Vercel](https://vercel.com/button)](https://vercel.com/new/clone?repository-url=https://github.com/djangorwanda/Django-Rwanda-website) + +### Other Platforms + +Build the production bundle: +```bash +yarn build +``` + +The output will be in the `.next` directory, ready for deployment to any Node.js hosting platform. + +--- + +## 🤝 Contributing + +We welcome contributions from developers of all skill levels! Here's how you can help: + +1. **Fork** the repository +2. **Create** a feature branch (`git checkout -b feature/amazing-feature`) +3. **Commit** your changes (`git commit -m 'Add amazing feature'`) +4. **Push** to the branch (`git push origin feature/amazing-feature`) +5. **Open** a Pull Request + +Please read our [Code of Conduct](https://djangorwanda.dev/community/code-of-conduct) before contributing. + +### Development Guidelines + +- Follow the existing code style +- Write meaningful commit messages +- Add tests for new features when applicable +- Update documentation as needed + +--- + +## 📄 License + +This project is licensed under the MIT License - see the [LICENSE](LICENSE) file for details. + +--- + +## 📞 Contact + +**Django Rwanda Community** + +- 📧 Email: [hello@djangorwanda.dev](mailto:hello@djangorwanda.dev) +- 📱 Phone: +250 (0) 788 123 456 +- 📍 Location: Kigali Innovation Hub, Kigali, Rwanda +- 🐙 GitHub: [@djangorwanda](https://github.com/djangorwanda) +- 🐦 Twitter: [@djangorwanda](https://twitter.com/djangorwanda) + +--- + +## Acknowledgments + +- [Next.js](https://nextjs.org/) - The React Framework +- [Radix UI](https://www.radix-ui.com/) - Accessible component primitives +- [Tailwind CSS](https://tailwindcss.com/) - Utility-first CSS framework +- [Vercel](https://vercel.com/) - Deployment platform +- [shadcn/ui](https://ui.shadcn.com/) - UI component inspiration +- All our amazing community members and contributors! + +--- + +
+

+ Website • + GitHub • + Twitter +

+
diff --git a/app/auth/login/page.tsx b/app/auth/login/page.tsx new file mode 100644 index 0000000..4b3efe2 --- /dev/null +++ b/app/auth/login/page.tsx @@ -0,0 +1,97 @@ +import { Card } from "@/components/ui/card" +import { Button } from "@/components/ui/button" +import { Mail, Lock, ArrowRight } from "lucide-react" +import Link from "next/link" + +export const metadata = { + title: "Sign In | Django Rwanda Community", + description: "Sign in to your Django Rwanda Community account", +} + +export default function LoginPage() { + return ( +
+
+
+
+ D +
+

Welcome Back

+

Sign in to your Django Rwanda Community account

+
+ + +
+ {/* Email */} +
+ +
+ + +
+
+ + {/* Password */} +
+ +
+ + +
+
+ + {/* Remember me & Forgot password */} +
+ + + Forgot password? + +
+ + {/* Submit */} + +
+ + {/* Divider */} +
+
+ or +
+
+ + {/* Social Login */} +
+ + +
+ + + {/* Sign up link */} +

+ Don't have an account?{" "} + + Sign up here + +

+
+
+ ) +} diff --git a/app/auth/signup/page.tsx b/app/auth/signup/page.tsx new file mode 100644 index 0000000..c3f4173 --- /dev/null +++ b/app/auth/signup/page.tsx @@ -0,0 +1,150 @@ +import { Card } from "@/components/ui/card" +import { Button } from "@/components/ui/button" +import { User, Mail, Lock, Zap } from "lucide-react" +import Link from "next/link" + +export const metadata = { + title: "Sign Up | Django Rwanda Community", + description: "Create your Django Rwanda Community account", +} + +export default function SignupPage() { + return ( +
+
+
+
+ D +
+

Join Django Rwanda

+

Create your account and start your journey

+
+ + +
+ {/* Full Name */} +
+ +
+ + +
+
+ + {/* Email */} +
+ +
+ + +
+
+ + {/* Password */} +
+ +
+ + +
+
+ + {/* Confirm Password */} +
+ +
+ + +
+
+ + {/* Interests */} +
+ +
+ + + + +
+
+ + {/* Terms agreement */} + + + {/* Submit */} + +
+ + {/* Divider */} +
+
+ or +
+
+ + {/* Social Sign up */} +
+ + +
+ + + {/* Sign in link */} +

+ Already have an account?{" "} + + Sign in here + +

+
+
+ ) +} diff --git a/app/community/code-of-conduct/page.tsx b/app/community/code-of-conduct/page.tsx new file mode 100644 index 0000000..3fd1fe9 --- /dev/null +++ b/app/community/code-of-conduct/page.tsx @@ -0,0 +1,76 @@ +import { Card } from "@/components/ui/card" +import Link from "next/link" + +export const metadata = { + title: "Code of Conduct | Django Rwanda Community", + description: "Our community values and principles", +} + +const sections = [ + { + title: "Our Pledge", + content: + "We are committed to providing a welcoming and inspiring community for all. We pledge that everyone will be treated with respect and dignity, regardless of age, body size, disability, ethnicity, gender identity and expression, level of experience, nationality, personal appearance, race, religion, sexual identity and orientation, or socioeconomic status.", + }, + { + title: "Our Standards", + content: + "We expect all community members to uphold the following standards: be respectful and inclusive, be professional in all interactions, take responsibility for your words and actions, and support fellow community members.", + }, + { + title: "Unacceptable Behavior", + items: [ + "Harassment or discrimination of any kind", + "Offensive comments related to personal characteristics", + "Trolling or intentional disruption", + "Publishing others' private information", + "Any illegal or unethical conduct", + ], + }, + { + title: "Enforcement", + content: + "Violations of this code of conduct will be taken seriously and may result in temporary or permanent removal from the community. Reports should be sent to conduct@djangorwanda.dev.", + }, +] + +export default function CodeOfConductPage() { + return ( +
+
+
+ + ← Back to Community + +

Code of Conduct

+

+ Our values and principles for a respectful and inclusive community. +

+
+
+ +
+
+
+ {sections.map((section, idx) => ( + +

{section.title}

+ {section.content &&

{section.content}

} + {section.items && ( +
    + {section.items.map((item, i) => ( +
  • + + {item} +
  • + ))} +
+ )} +
+ ))} +
+
+
+
+ ) +} diff --git a/app/community/contribute/page.tsx b/app/community/contribute/page.tsx new file mode 100644 index 0000000..aeffdb0 --- /dev/null +++ b/app/community/contribute/page.tsx @@ -0,0 +1,97 @@ +import { Card } from "@/components/ui/card" +import { Button } from "@/components/ui/button" +import { BookOpen, Code, Users, Megaphone } from "lucide-react" +import Link from "next/link" + +export const metadata = { + title: "Contribute | Django Rwanda Community", + description: "Help shape the future of Django Rwanda", +} + +const contributionAreas = [ + { + icon: Code, + title: "Code & Development", + description: "Contribute to our open-source projects and help build solutions for African communities.", + }, + { + icon: BookOpen, + title: "Content & Documentation", + description: "Help us create tutorials, guides, and documentation for the community.", + }, + { + icon: Users, + title: "Community Support", + description: "Become a mentor, organize events, or moderate our community channels.", + }, + { + icon: Megaphone, + title: "Marketing & Outreach", + description: "Help spread the word about Django Rwanda and grow our community.", + }, +] + +export default function ContributePage() { + return ( +
+
+
+ + ← Back to Community + +

How to Contribute

+

+ Every contribution matters. There are many ways to help build and improve Django Rwanda. +

+
+
+ +
+
+
+ {contributionAreas.map((area, idx) => { + const Icon = area.icon + return ( + +
+ +
+

{area.title}

+

{area.description}

+
+ ) + })} +
+ + {/* Getting Started */} + +

Getting Started

+
    +
  1. + 1. + Join our community on Discord or Slack +
  2. +
  3. + 2. + Introduce yourself and tell us your interests +
  4. +
  5. + 3. + Check our contribution guidelines on GitHub +
  6. +
  7. + 4. + Start contributing on an issue or create your own! +
  8. +
+ + + +
+
+
+
+ ) +} diff --git a/app/community/join/page.tsx b/app/community/join/page.tsx new file mode 100644 index 0000000..530757a --- /dev/null +++ b/app/community/join/page.tsx @@ -0,0 +1,90 @@ +import { Card } from "@/components/ui/card" +import { Button } from "@/components/ui/button" +import { Check } from "lucide-react" +import Link from "next/link" + +export const metadata = { + title: "Join Community | Django Rwanda", + description: "Become a member of Django Rwanda Community", +} + +const benefits = [ + "Access to exclusive workshops and training materials", + "Join networking events and meetups", + "Collaborate on open-source projects", + "Get mentorship from experienced developers", + "Access to job board and opportunities", + "Connect with 500+ community members", +] + +export default function JoinPage() { + return ( +
+
+
+ + ← Back to Community + +

Join Django Rwanda

+

+ Be part of a vibrant community of African developers dedicated to innovation and learning. +

+
+
+ +
+
+
+ {/* Benefits */} +
+

Membership Benefits

+ +
    + {benefits.map((benefit, idx) => ( +
  • + + {benefit} +
  • + ))} +
+
+
+ + {/* Signup Form */} +
+

Get Started

+ +
+ + + +