Official website for Floresta - A Bitcoin full node implementation with Utreexo support.
- Features
- Getting Started
- Project Structure
- Contributing
- Development Guidelines
- Blog System
- Commit Convention
- Pull Request Process
- License
- 🎨 Modern, responsive design with dark/light theme support
- 📝 Markdown-based blog system for community contributions
- ⚡ Built with Next.js 16 App Router for optimal performance
- 🎯 TypeScript for type safety
- 💅 Tailwind CSS v4 for styling
- 🔄 Dynamic routing for blog posts
- 🌓 Theme persistence with localStorage
- 📱 Mobile-first responsive design
- Node.js 18+ or 20+
- pnpm (recommended) or npm
-
Clone the repository
git clone https://github.com/cristiansolutchak/floresta-site cd floresta-site -
Install dependencies
pnpm install # or npm install -
Run development server
pnpm dev # or npm run dev -
Open in browser Navigate to http://localhost:3000
# Build the project
pnpm build
# Start production server
pnpm startfloresta-site/
├── app/ # Next.js App Router
│ ├── (pages)/ # Route group for pages
│ │ ├── blog/ # Blog routes
│ │ │ ├── [slug]/ # Dynamic blog post pages
│ │ │ └── page.tsx # Blog listing page
│ │ ├── team/ # Team page
│ │ ├── supporters/ # Supporters page
│ │ └── page.tsx # Home page
│ ├── components/ # React components
│ │ ├── shared/ # Shared components (Button, ThemeToggle)
│ │ ├── layout/ # Layout components (Navbar, Footer)
│ │ ├── home/ # Home page components
│ │ ├── blog/ # Blog components
│ │ ├── team/ # Team components
│ │ └── supporters/ # Supporters components
│ ├── hooks/ # Custom React hooks
│ │ └── useTheme.ts # Theme detection hook
│ ├── globals.css # Global styles and CSS variables
│ ├── layout.tsx # Root layout
│ └── favicon.ico # Site favicon
├── content/ # Content files
│ └── posts/ # Blog posts (Markdown)
│ ├── examples.md # Template for contributors
│ └── *.md # Published posts
├── lib/ # Utility functions
│ └── posts.ts # Blog post utilities
├── public/ # Static assets
│ └── images/ # Image assets
│ ├── icons/ # SVG icons
│ ├── illustrations/ # 3D illustrations
│ └── backgrounds/ # Background images
├── CONTRIBUTING.md # General contribution guide
├── CONTRIBUTING_BLOG.md # Blog contribution guide
├── COLORS.md # Color palette documentation
└── README.md # This file
We welcome contributions from the community! Here's how you can help:
- Blog Posts - Share knowledge about Bitcoin, Utreexo, or related topics
- Bug Fixes - Found a bug? Submit a fix!
- Features - Implement new features or improve existing ones
- Documentation - Improve documentation or add examples
- Design - Enhance UI/UX or add new visual elements
- Fork the repository
- Create a feature branch
git checkout -b feature/your-feature-name
- Make your changes
- Test locally
pnpm dev
- Commit with conventional format (see below)
- Push and create a Pull Request
For detailed guidelines, see CONTRIBUTING.md
Components should follow this structure:
// app/components/category/ComponentName.tsx
import { ComponentProps } from "./types"; // if needed
export function ComponentName({ prop1, prop2 }: ComponentProps) {
// Component logic
return <div className="...">{/* JSX */}</div>;
}- Components: PascalCase (e.g.,
BlogPostCard.tsx) - Utilities: camelCase (e.g.,
posts.ts) - Pages: lowercase
page.tsx - Styles: lowercase (e.g.,
globals.css)
- Use TypeScript for all new files
- Use functional components with hooks
- Prefer named exports over default exports for components
- Use Tailwind CSS classes for styling
- Follow the existing code structure and patterns
The site uses CSS custom properties for theming:
/* Light theme */
:root {
--background: #ffffff;
--foreground: #262626;
--primary: #346c60;
/* ... */
}
/* Dark theme */
:root.dark {
--background: #14231f;
--foreground: #dcefeb;
--primary: #abdcd2;
/* ... */
}- Create a folder in
app/(pages)/your-page/ - Add
page.tsxinside - Create components in
app/components/your-page/ - Update navigation in
Navbar.tsxif needed
The blog uses Markdown files with frontmatter metadata.
-
Create a new
.mdfile incontent/posts/ -
Use
examples.mdas a template -
Include required frontmatter:
--- title: "Your Post Title" author: "Your Name" date: "YYYY-MM-DD" tags: ["Tag1", "Tag2"] image: "/images/your-image.jpg" excerpt: "Brief description" --- Your content here...
For detailed blog contribution guidelines, see CONTRIBUTING_BLOG.md
We follow Conventional Commits specification:
<type>(<scope>): <subject>
<body>
<footer>
feat: New featurefix: Bug fixdocs: Documentation changesstyle: Code style changes (formatting, missing semicolons, etc.)refactor: Code refactoringperf: Performance improvementstest: Adding or updating testschore: Maintenance tasksci: CI/CD changes
# Feature
git commit -m "feat(blog): add markdown support for blog posts"
# Bug fix
git commit -m "fix(navbar): resolve mobile menu closing issue"
# Documentation
git commit -m "docs(readme): update installation instructions"
# Style
git commit -m "style(footer): adjust spacing and alignment"
# Refactor
git commit -m "refactor(components): extract shared button component"blog: Blog-related changesnavbar: Navbar componentfooter: Footer componenttheme: Theme systemhome: Home pageteam: Team pagesupporters: Supporters pageui: General UI changesdeps: Dependencies
- ✅ Test your changes locally
- ✅ Ensure no console errors
- ✅ Check responsive design (mobile/tablet/desktop)
- ✅ Test dark/light theme if applicable
- ✅ Update documentation if needed
- ✅ Follow commit conventions
Use the same format as commits:
feat(blog): add RSS feed support
fix(navbar): resolve scroll detection on mobile
docs: update contributing guidelines
## Description
Brief description of what this PR does
## Type of Change
- [ ] Bug fix
- [ ] New feature
- [ ] Breaking change
- [ ] Documentation update
## Changes Made
- Change 1
- Change 2
- Change 3
## Screenshots (if applicable)
Add screenshots for UI changes
## Testing
Describe how to test your changes
## Checklist
- [ ] My code follows the project's style guidelines
- [ ] I have tested my changes locally
- [ ] I have updated the documentation
- [ ] My commits follow the conventional commit format- Automated Checks: CI/CD will run automatically
- Code Review: Maintainers will review your code
- Feedback: Address any requested changes
- Approval: Once approved, a maintainer will merge
- Your changes will be deployed automatically
- You'll be credited in the contributors list
- Thank you for contributing! 🎉
This project is licensed under the MIT License - see the LICENSE file for details.
- Built with Next.js
- Styled with Tailwind CSS
- Markdown processing with gray-matter and react-markdown
Made with ❤️ by the Floresta community