A modern, modular, and scalable web application for Nodebridge Africa, built with Next.js, TypeScript, Tailwind CSS, Framer Motion, and Radix UI. This project powers the Nodebridge Africa landing page, blog, documentation, and community resources.
- Landing Page: Modular, animated sections (Hero, Features, Gallery, Testimonials, etc.)
- Gallery: Showcases images from past events and workshops (Unsplash-powered)
- Blog: Dynamic blog with filters, featured posts, and pagination
- About, Privacy, Terms, Sponsor: Dedicated pages with modular content
- UI Components: Reusable, accessible components styled with Tailwind CSS and Radix UI
- TypeScript: Type-safe codebase
- Framer Motion: Smooth animations for sections and UI elements
- Dark Mode: Fully supported
.
├── app/ # Main application routes and pages
│ ├── (landing)/ # Landing page sections
│ │ └── sections/
│ │ ├── CoreFeatures.tsx
│ │ ├── CtaBanner.tsx
│ │ ├── EducationHub.tsx
│ │ ├── FAQ.tsx
│ │ ├── Gallery.tsx
│ │ ├── Hero.tsx
│ │ ├── PartnersMarquee.tsx
│ │ ├── SupportedNetworks.tsx
│ │ └── Testimonials.tsx
│ ├── about/ # About page and sections
│ │ ├── page.tsx
│ │ └── sections/
│ │ └── AboutContent.tsx
│ ├── blog/ # Blog page and sections
│ │ ├── page.tsx
│ │ └── sections/
│ │ ├── BlogFeatured.tsx
│ │ ├── BlogFilters.tsx
│ │ ├── BlogGrid.tsx
│ │ ├── BlogHero.tsx
│ │ ├── BlogNewsletter.tsx
│ │ └── BlogPagination.tsx
│ ├── privacy/ # Privacy policy page and content
│ │ ├── page.tsx
│ │ └── sections/
│ │ └── PrivacyContent.tsx
│ ├── terms/ # Terms of service page and content
│ │ ├── page.tsx
│ │ └── sections/
│ │ └── TermsContent.tsx
│ ├── sponsor/ # Sponsorship page and sections
│ │ ├── page.tsx
│ │ └── sections/
│ │ ├── SponsorBenefits.tsx
│ │ ├── SponsorContact.tsx
│ │ ├── SponsorHero.tsx
│ │ ├── SponsorPackages.tsx
│ │ └── SponsorTestimonials.tsx
│ ├── launch/ # Launch page for RPC endpoints
│ │ └── page.tsx
│ ├── globals.css # Global styles (Tailwind)
│ ├── layout.tsx # Root layout
│ └── page.tsx # Main landing page
├── components/ # Shared React components
│ ├── layout/ # Layout components (Header, Footer)
│ ├── providers/ # Context providers
│ └── ui/ # UI components (buttons, cards, etc.)
├── constant/ # App-wide constants
├── data/ # Static data (e.g., blog entries)
├── hooks/ # Custom React hooks
├── lib/ # Utility functions and libraries
├── public/ # Static assets (if any)
├── package.json # Project metadata and dependencies
├── tailwind.config.ts # Tailwind CSS configuration
├── tsconfig.json # TypeScript configuration
└── ... # Other config and system files
- Framework: Next.js 13+
- Language: TypeScript
- Styling: Tailwind CSS, Radix UI
- Animation: Framer Motion
- Icons: Lucide React
- Forms: React Hook Form
- Linting: ESLint
- Clone the repository:
git clone <repo-url> cd nodebridge
- Install dependencies:
npm install # or yarn install
- Run the development server:
npm run dev # or yarn dev
- Open http://localhost:3000 in your browser.
- Gallery Images: Update
app/(landing)/sections/Gallery.tsx
to change event/workshop images (uses Unsplash by default). - UI Components: Add or modify components in
components/ui/
. - Content: Edit section files in
app/(landing)/sections/
or other page directories. - Theming: Adjust Tailwind config and CSS variables in
app/globals.css
. - Add New Pages: Create a new folder in
app/
and add apage.tsx
file.
- Modular Sections: Each landing page section is a standalone React component for easy reordering and reuse.
- Gallery: Responsive, animated grid of Unsplash images with captions.
- Blog: Filterable, paginated, and supports featured posts.
- Accessibility: Uses Radix UI primitives for accessible UI elements.
- Dark Mode: Fully supported via Tailwind and CSS variables.
npm run dev
— Start development servernpm run build
— Build for productionnpm run start
— Start production servernpm run lint
— Lint codebase
- Linting: ESLint is configured for TypeScript and Next.js best practices.
- Testing: (Add your preferred testing setup, e.g., Jest, React Testing Library)
- Static Export: The app is configured for static export (
output: 'export'
innext.config.js
). - Image Optimization: Images are unoptimized for static export (
images: { unoptimized: true }
). - Recommended: Deploy on Vercel or any static hosting provider.
- Fork the repository
- Create your feature branch (
git checkout -b feature/your-feature
) - Commit your changes (
git commit -m 'Add some feature'
) - Push to the branch (
git push origin feature/your-feature
) - Open a Pull Request
This project is licensed under the MIT License.
- How do I add a new section to the landing page?
- Create a new component in
app/(landing)/sections/
and import it inapp/page.tsx
.
- Create a new component in
- How do I update the gallery?
- Edit the
galleryImages
array inGallery.tsx
.
- Edit the
- How do I add a new blog post?
- Add your post data to the appropriate file in
data/blog/
.
- Add your post data to the appropriate file in
For more information, see the code comments and explore the modular structure. If you have questions, open an issue or reach out to the maintainers.