{"id":31059248,"url":"https://github.com/brennanbrown/berryhouse","last_synced_at":"2025-09-15T08:49:28.285Z","repository":{"id":312592577,"uuid":"1046697903","full_name":"brennanbrown/berryhouse","owner":"brennanbrown","description":"🍓 Berry House is an independent agency and studio based out of Calgary, Canada that builds fast, accessible JAMstack websites and thoughtful, effective writing. We help independent creators, non‑profits, and small teams communicate clearly and own their platform. ","archived":false,"fork":false,"pushed_at":"2025-09-10T05:45:45.000Z","size":16172,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2025-09-10T07:35:39.998Z","etag":null,"topics":["accessibility","agency","for-hire","freelance","jamstack","studio"],"latest_commit_sha":null,"homepage":"https://berryhouse.ca","language":"Nunjucks","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/brennanbrown.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2025-08-29T04:56:12.000Z","updated_at":"2025-09-10T05:59:13.000Z","dependencies_parsed_at":"2025-08-31T19:29:23.972Z","dependency_job_id":"0e12c1ed-90be-4f01-ad5b-d287ab61aa06","html_url":"https://github.com/brennanbrown/berryhouse","commit_stats":null,"previous_names":["brennanbrown/strawberry"],"tags_count":0,"template":false,"template_full_name":"brennanbrown/11ty-Indie-Web-Blog-Starter","purl":"pkg:github/brennanbrown/berryhouse","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/brennanbrown%2Fberryhouse","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/brennanbrown%2Fberryhouse/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/brennanbrown%2Fberryhouse/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/brennanbrown%2Fberryhouse/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/brennanbrown","download_url":"https://codeload.github.com/brennanbrown/berryhouse/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/brennanbrown%2Fberryhouse/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":275232414,"owners_count":25428224,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-09-15T02:00:09.272Z","response_time":75,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["accessibility","agency","for-hire","freelance","jamstack","studio"],"created_at":"2025-09-15T08:49:25.531Z","updated_at":"2025-09-15T08:49:28.276Z","avatar_url":"https://github.com/brennanbrown.png","language":"Nunjucks","funding_links":[],"categories":[],"sub_categories":[],"readme":"![Berry House preview](./screenshot.png)\n\n# Berry House\n\nBerry House is a small, values‑driven studio site and writing hub built with Eleventy and Tailwind CSS. It emphasizes accessibility, performance, and IndieWeb principles—owning your platform and content.\n\nThis repository contains the production code for the Berry House agency website. It is not a generic theme or starter. If you’re looking for a reusable blog starter, please see the template this site is based on (created by the same author):\n\n- 11ty Indie Web Blog Starter: https://github.com/brennanbrown/11ty-Indie-Web-Blog-Starter\n- Live demo of the starter: https://indieweb-blog-starter.netlify.app/\n\n- Live site: https://berryhouse.ca/\n- Repository: https://github.com/brennanbrown/berryhouse\n\n## Tech Stack\n- Eleventy (11ty) for site generation\n- Nunjucks templating\n- Tailwind CSS for styling\n- Client‑side search with FlexSearch\n- Optional analytics (Plausible)\n\n\u003e New to this? Read the non-technical guide: [GUIDE.md](./GUIDE.md)\n\n## Site Features\n\n- **Simple setup** - Edit one config file and you're ready to publish\n- **IndieWeb ready** - Microformats, webmentions, and RSS built-in\n- **Modern design** - Clean, accessible, mobile-first interface\n- **Privacy focused** - No tracking by default, optional ethical analytics\n- **Full-featured** - Search, tags, dark mode, and more\n\n## ⚡ Quick Start\n\n1. **Clone and install**:\n   ```bash\n   git clone https://github.com/brennanbrown/berryhouse.git\n   cd berryhouse\n   npm install\n   ```\n\n2. **Configure the site** (most important step!):\n   Edit `src/_data/site.json` with your information:\n   ```json\n   {\n     \"name\": \"Your Blog Name\",\n     \"author\": \"Your Name\", \n     \"email\": \"your@email.com\",\n     \"url\": \"https://yourdomain.com\",\n     \"bio\": {\n       \"short\": \"Your tagline\",\n       \"long\": \"Your longer bio...\"\n     },\n     \"social\": {\n       \"github\": \"yourusername\",\n       \"mastodon\": \"@you@mastodon.social\"\n     }\n   }\n   ```\n\n3. **Start the dev server**:\n  ```bash\n  npm run dev\n  ```\n  Visit `http://localhost:8080` and start creating!\n\n4. **Build for production**:\n  ```bash\n  npm run build\n  ```\n\n## 🧑‍💻 Development\n\n- Run dev server (with Tailwind watcher): `npm run dev`\n- Build the site: `npm run build`\n- Take portfolio screenshots (local): `npm run shots:portfolio`\n- Take portfolio screenshots (live links): `npm run shots:portfolio:live`\n\n## ✅ Testing\n\nThis project includes a simple build validation:\n\n- Run tests: `npm test` or `npm run test:build`\n- End-to-end accessibility checks: `npm run test:e2e`\n\nSearch index is generated at build time (`/search.json`) via a custom Eleventy collection.\n\n## 🛠️ Configuration\n\nThis project uses a single configuration file, `src/_data/site.json`, for most customization:\n\nQuick reference (matches usage in `src/_includes/layouts/post.njk`, `src/contact.njk`, and `src/donate.njk`):\n\n- **Newsletter** (renders on posts when enabled):\n  ```json\n  {\n    \"newsletter\": {\n      \"enabled\": true,\n      \"provider\": \"buttondown\",\n      \"action\": \"https://buttondown.email/api/emails/embed-subscribe/yourusername\",\n      \"title\": \"Join the Newsletter\",\n      \"description\": \"Get thoughtful updates delivered to your inbox.\"\n    }\n  }\n  ```\n  Use any provider by swapping the `action` with a POST endpoint.\n\n- **Contact form** (configure a backend):\n  In `src/contact.njk`, wire up Netlify Forms or a service like Formspree/Basin by adding provider attributes, e.g.:\n  ```html\n  \u003cform name=\"contact\" method=\"POST\" data-netlify=\"true\"\u003e\n    \u003cinput type=\"hidden\" name=\"form-name\" value=\"contact\"\u003e\n    \u003c!-- fields --\u003e\n  \u003c/form\u003e\n  ```\n\n- **Donations/Sponsorship** (renders on `/donate/`):\n  ```json\n  {\n    \"donate\": {\n      \"enabled\": true,\n      \"kofi\": \"yourusername\",\n      \"buymeacoffee\": \"yourusername\",\n      \"github\": \"yourusername\",\n      \"message\": \"If you find value in my writing, consider supporting my work.\"\n    }\n  }\n  ```\n\n### Essential Settings\n- **Site info**: Name, description, URL, author\n- **Social links**: GitHub, Mastodon, Twitter (all optional)\n- **Bio**: Short tagline and longer description\n- **Contact**: Email and location\n\n### Optional Features\n- **Newsletter**: Buttondown, ConvertKit, or custom integration\n- **Donations**: Ko-fi, Buy Me a Coffee, GitHub Sponsors\n- **Analytics**: Plausible, Fathom, or Simple Analytics\n- **Webmentions**: Automatic setup with webmention.io\n\n### Quick Setup Examples\n\n**Minimal setup** (just the essentials):\n```json\n{\n  \"name\": \"My Blog\",\n  \"author\": \"Jane Doe\",\n  \"email\": \"jane@example.com\",\n  \"url\": \"https://janedoe.blog\"\n}\n```\n\n**Full setup** with all features:\n```json\n{\n  \"name\": \"Jane's Digital Garden\",\n  \"author\": \"Jane Doe\",\n  \"email\": \"jane@example.com\", \n  \"url\": \"https://janedoe.blog\",\n  \"bio\": {\n    \"short\": \"Writer \u0026 digital minimalist\",\n    \"long\": \"I write about technology, minimalism, and intentional living.\"\n  },\n  \"social\": {\n    \"github\": \"janedoe\",\n    \"mastodon\": \"@jane@mastodon.social\"\n  },\n  \"newsletter\": {\n    \"enabled\": true,\n    \"provider\": \"buttondown\",\n    \"action\": \"https://buttondown.email/api/emails/embed-subscribe/jane\"\n  },\n  \"analytics\": {\n    \"enabled\": true,\n    \"provider\": \"plausible\"\n  }\n}\n```\n\n## 📁 Project Structure\n\n```\nsrc/\n├── _data/\n│   ├── site.json       # 🎯 Main config file (edit this!)\n│   └── tagColors.json  # Tag color mappings\n├── _includes/\n│   ├── layouts/        # Page layouts\n│   └── partials/       # Reusable components\n├── assets/\n│   ├── css/           # Tailwind CSS\n│   └── js/            # Interactive features\n├── blog/              # 📝 Your blog posts go here\n├── about.njk          # About page\n├── contact.njk        # Contact page  \n├── uses.njk           # Tools \u0026 setup page\n├── now.njk            # What you're up to now\n├── blogroll.njk       # Recommended blogs\n├── archive.njk        # Post archive\n└── style.njk          # Living style guide\n```\n\n## 🖼️ Configurable Placeholder Assets\n\nThis project includes a tiny build helper that fetches placeholder images so your site looks complete out‑of‑the‑box without committing binaries. Files are saved to `src/assets/` and passed through to `/assets/` at build time.\n\nWhat gets fetched by default:\n\n- **profile.jpg** — used on `about` page\n- **og-default.png** — fallback Open Graph image\n- **retro-stars.png** — background tile used in one demo post\n\nHow to customize:\n\n- **Drop in your own files**: place files with the same names in `src/assets/` and the fetcher will skip downloading.\n- **Environment variables**: set any of these to your own URLs\n  - `PROFILE_IMAGE_URL`\n  - `OG_DEFAULT_URL`\n  - `RETRO_STARS_URL`\n  - Example: `PROFILE_IMAGE_URL=https://example.com/me.jpg npm run build`\n- **site.json config**: add an optional `assets` section to `src/_data/site.json`:\n  ```json\n  {\n    \"assets\": {\n      \"profileUrl\": \"https://example.com/me.jpg\",\n      \"ogDefaultUrl\": \"https://example.com/og.png\",\n      \"retroStarsUrl\": \"https://example.com/retro-stars.png\"\n    }\n  }\n  ```\n- **Skip entirely**: set `SKIP_FETCH_ASSETS=1` (or `true`) to bypass downloading (useful for offline/CI).\n\nThe fetcher runs as part of the build (`npm run build`), before CSS and Eleventy.\n\n## 🚀 Deployment\n\n### Netlify (recommended)\n1. Connect the repository `brennanbrown/berryhouse` in Netlify\n2. Build command: `npm run build`\n3. Publish directory: `_site`\n4. Set the primary domain to `berryhouse.ca`\n\n### Other static hosts\n1. Run `npm run build`\n2. Upload the contents of the `_site/` directory to your host (e.g., Cloudflare Pages, GitHub Pages with a workflow, Vercel static)\n\n## 🌐 IndieWeb Setup\n\nThis project includes IndieWeb features out of the box:\n\n### Webmentions\n1. Sign up at [webmention.io](https://webmention.io)\n2. Add your domain to `site.json`:\n   ```json\n   \"webmentions\": {\n     \"enabled\": true,\n     \"domain\": \"yourdomain.com\"\n   }\n   ```\n\n### Microformats\n- h-card for your identity\n- h-entry for blog posts  \n- h-feed for your blog listing\n- All automatically included!\n\n## 🎨 Customization\n\n### Colors \u0026 Styling\n- Edit `tailwind.config.cjs` for theme colors\n- Modify `src/assets/css/build.css` for custom styles\n- Update `src/_data/tagColors.json` for tag colors\n\n### Adding Pages\n1. Create a new `.njk` file in `src/`\n2. Add front matter with layout and permalink\n3. Add navigation link in `src/_includes/layouts/base.njk`\n\n### Newsletter Integration\nSupports multiple providers:\n- **Buttondown**: Set `newsletter.provider` to `\"buttondown\"`\n- **ConvertKit**: Set to `\"convertkit\"` \n- **Custom**: Use any form action URL\n\n## 🗺️ Roadmap\n\nWe track work for this agency site in issues/PRs. Larger feature requests and reusable improvements should be proposed in the underlying starter project when appropriate.\n\n## 🤝 Contributing\n\nContributions are welcome. Please note this is the Berry House agency website—not a generic template. Use this repo for fixes to copy, accessibility, performance, or build issues specific to berryhouse.ca.\n\n- For site issues (typos, broken links, accessibility, performance): open an issue here.\n- For reusable features or starter-specific improvements: contribute to the 11ty Indie Web Blog Starter instead: https://github.com/brennanbrown/11ty-Indie-Web-Blog-Starter\n\nWorkflow:\n1. Fork the repository\n2. Create a feature branch\n3. Make your changes (include clear commit messages)\n4. Open a PR with a concise description, screenshots if applicable, and notes on testing\n\n## 📄 License\n\nMIT License — see `LICENSE`.\n\nNote: this repository is the Berry House agency website (production code). If you need a reusable starter, use the 11ty Indie Web Blog Starter linked above.\n\n## 🙏 Acknowledgments\n\nBuilt with:\n- [Eleventy](https://11ty.dev) - Static site generator\n- [Tailwind CSS](https://tailwindcss.com) - Utility-first CSS\n- [FlexSearch](https://github.com/nextapps-de/flexsearch) - Client-side search\n- IndieWeb principles and community wisdom\n\n---\n\n**Ready to break free from social media?** Clone this template and start building your corner of the independent web! 🌱\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbrennanbrown%2Fberryhouse","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fbrennanbrown%2Fberryhouse","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbrennanbrown%2Fberryhouse/lists"}