Welcome to the official repository for the Solana Colombia website. This platform is designed to unite builders, developers, and visionaries across Colombia to build the future of Web3 on Solana.
- Framework: Astro 6 (Server-side Rendering)
- Styling: Tailwind CSS 4
- Database: Cloudflare D1 (SQL database for builders/profiles)
- Deployment: Cloudflare Workers via GitHub Actions
- Email: Resend
- Linting/Formatting: Biome via Ultracite preset
- Blockchain: Solana Web3.js & Wallet Adapter
- Node.js:
v22.12.0or higher - npm: Package manager included with Node.js
-
Clone the repository:
git clone https://github.com/Panmoni/solanacolombia-www.git cd solanacolombia-www -
Install dependencies:
npm install
-
Setup environment variables: Copy
.env.exampleto.envand fill in the required values (Resend API key, etc.).
To start the local development server:
npm run devNote: The
devscript automatically runsnpm run db:pullto sync your local D1 database with the production data before starting the Astro dev server (runs on the real Cloudflare workerd runtime).
The project uses Biome with the Ultracite Astro preset. A pre-commit hook (husky + lint-staged) auto-formats staged files on every commit.
npm run lint # Check for lint errors
npm run lint:fix # Fix lint errors
npm run format # Check formatting
npm run format:write # Fix formattingPushing to main triggers automatic deployment to Cloudflare Workers via GitHub Actions. The workflow requires two repository secrets:
CLOUDFLARE_API_TOKENCLOUDFLARE_ACCOUNT_ID
You can also deploy manually:
npm run deployThis repo ships a set of Claude Code hooks that guard against common footguns when Claude Code is editing files or running commands:
- Protected files:
.env,wrangler.toml,schema.sql, and already-appliedmigrations/*.sqlcannot be edited by the AI. - Blocked commands:
wrangler deploy,wrangler d1 execute --remote,wrangler secret put/delete,DROP TABLE, and other irreversible prod operations are refused before execution. - Auto-format + typecheck: every
.astro/.tsedit is run throughbiomeandastro check. - Pre-PR gate:
gh pr createis blocked unlessastro checkandastro buildboth pass.
See docs/CLAUDE_HOOKS.md for the full list, the rationale, and how to bypass a hook when legitimately needed.
The site uses Astro Content Collections for structured content.
Blog posts are stored in src/content/blog/ as Markdown files.
- Create a new
.mdfile insrc/content/blog/. - Use the following frontmatter:
--- draft: false title: "Your Post Title" snippet: "A short summary of the post." publishDate: "YYYY-MM-DD HH:mm" image: src: "/blog/path-to-image.png" alt: "Description of image" category: "Category Name" author: "Author Name" tags: ["tag1", "tag2"] --- # Your Content Here
- Place images in
public/blog/.
Team members are stored in src/content/team/ as JSON files.
- Create a new
.jsonfile insrc/content/team/(e.g.,name-lastname.json). - Add the following structure:
{ "name": "Full Name", "title": "Role/Title", "xUrl": "https://x.com/username", "xUsername": "username", "image": { "src": "/team/filename.png", "alt": "Full Name" }, "order": 1 } - Place headshots in
public/team/(recommended size: 400x400px).
Gallery items are stored in src/content/gallery/ as JSON files.
- Create a new
.jsonfile insrc/content/gallery/(e.g.,1.json,2.json). - Add the following structure:
{ "title": "Event Name", "description": "Short description of the event.", "image": { "src": "/img/filename.jpg", "alt": "Event Description" }, "order": 1 } - Place images in
public/img/.
Unlike the blog or team members, Builders and Projects are dynamic and stored in the Cloudflare D1 database.
- To Add a Builder: Users must connect their Solana wallet on the
/builderspage and fill out the registration form. - To Add a Project: Once registered as a builder, users can create and manage their projects directly from their dashboard.
- Local Development: When running locally, the
db:pullscript syncs the production database so you can see live data.
The site uses Cloudflare D1 for dynamic data like the Builders directory.
- Local Development: The database is stored locally in
.wrangler/. - Syncing Data: Use
npm run db:pullto pull the latest production data to your local environment. - Wrangler: Use
npx wrangler d1to run migrations or execute SQL queries.
/
βββ .github/workflows/ # GitHub Actions (auto-deploy to Workers)
βββ public/ # Static assets (images, icons, etc.)
βββ scripts/security/ # Dependency audit tooling
βββ src/
β βββ components/ # Reusable UI components
β βββ content/ # Content Collections (Blog, Team, Gallery)
β βββ layouts/ # Page layouts
β βββ lib/ # Auth, utilities
β βββ pages/ # File-based routing
β β βββ api/ # Server-side API endpoints (D1)
β βββ styles/ # Global styles (Tailwind CSS)
β βββ content.config.ts # Content schema definitions
βββ wrangler.toml # Cloudflare Workers configuration
βββ astro.config.mjs # Astro configuration
We welcome contributions from the community!
- Fork the repo.
- Create your feature branch (
git checkout -b feature/AmazingFeature). - Commit your changes (
git commit -m 'Add some AmazingFeature'). - Push to the branch (
git push origin feature/AmazingFeature). - Open a Pull Request.
- Telegram: Join our community
- X (Twitter): @SolanaColombia
- Website: solanacolombia.com
Built with β€οΈ by the Solana Colombia community.