{"id":50517682,"url":"https://github.com/iamteppei/iamteppei.github.io","last_synced_at":"2026-06-03T01:03:32.236Z","repository":{"id":360673108,"uuid":"1251190024","full_name":"iamteppei/iamteppei.github.io","owner":"iamteppei","description":"A personal blog","archived":false,"fork":false,"pushed_at":"2026-05-27T10:51:05.000Z","size":22,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-05-27T12:21:41.308Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"HTML","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/iamteppei.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":"2026-05-27T10:30:48.000Z","updated_at":"2026-05-27T10:51:09.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/iamteppei/iamteppei.github.io","commit_stats":null,"previous_names":["iamteppei/iamteppei.github.io"],"tags_count":null,"template":false,"template_full_name":null,"purl":"pkg:github/iamteppei/iamteppei.github.io","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/iamteppei%2Fiamteppei.github.io","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/iamteppei%2Fiamteppei.github.io/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/iamteppei%2Fiamteppei.github.io/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/iamteppei%2Fiamteppei.github.io/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/iamteppei","download_url":"https://codeload.github.com/iamteppei/iamteppei.github.io/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/iamteppei%2Fiamteppei.github.io/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":33843611,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-06-02T02:00:07.132Z","response_time":109,"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":[],"created_at":"2026-06-03T01:03:30.595Z","updated_at":"2026-06-03T01:03:32.220Z","avatar_url":"https://github.com/iamteppei.png","language":"HTML","funding_links":[],"categories":[],"sub_categories":[],"readme":"# IamTeppei Blog\n\nA simple blog built with Jekyll for GitHub Pages, featuring insights and updates about digital solutions from IamTeppei.\n\n## Overview\n\nThis repository contains a clean, modern blog layout built using Jekyll, the static site generator that powers GitHub Pages.\n\n## Features\n\n- 📝 Clean blog post layout\n- 🎨 Modern, responsive design\n- 📱 Mobile-friendly\n- 🚀 Easy to deploy on GitHub Pages\n- ✍️ Simple markdown-based posts\n\n## Structure\n\n```\n.\n├── _config.yml          # Jekyll configuration\n├── _layouts/            # Page layouts\n│   ├── default.html     # Main layout template\n│   └── post.html        # Blog post layout\n├── _posts/              # Blog posts organized by date\n│   └── YYYY/            # Year folder\n│       └── MM/          # Month folder\n│           └── DD/      # Day folder\n│               └── YYYY-MM-DD-title-of-post.md\n├── assets/              # Static assets\n│   ├── css/\n│   │   └── style.css    # Stylesheet\n│   └── posts/           # Post-specific media files\n│       └── YYYY/MM/DD/  # Mirrors _posts date structure\n│           └── images/  # Images for specific post\n└── index.html           # Homepage (blog list)\n```\n\n## Adding New Posts\n\nTo add a new blog post:\n\n1. Create a date-based folder structure: `_posts/YYYY/MM/DD/`\n2. Create your post file: `_posts/YYYY/MM/DD/YYYY-MM-DD-title-of-post.md`\n3. (Optional) Create a parallel media folder: `assets/posts/YYYY/MM/DD/images/`\n4. Add front matter at the top of your post:\n\nOr run command \n```bash\nmake new-post TITLE=\"My Post Title\"\n```\n\n```markdown\n---\nlayout: post\ntitle: \"Your Post Title\"\ndate: YYYY-MM-DD HH:MM:SS +0000\n---\n\nYour content here...\n```\n\n5. Reference media files using absolute paths with the `relative_url` filter:\n   ```markdown\n   ![Image Description]({{ '/assets/posts/YYYY/MM/DD/images/your-image.png' | relative_url }})\n   ```\n\n### Post Organization\n\nPosts are organized in date-based folders (YYYY/MM/DD/) with parallel media storage to:\n- Keep related content logically grouped by date\n- Store media files in a parallel structure under `assets/posts/`\n- Maintain a clean, organized structure\n- Make it easy to find and manage posts and their media by date\n- Ensure Jekyll correctly serves all media files\n\nEach post's structure:\n- The post markdown file: `_posts/YYYY/MM/DD/YYYY-MM-DD-title.md`\n- Associated media files: `assets/posts/YYYY/MM/DD/images/`\n- Other files: `assets/posts/YYYY/MM/DD/files/` (for PDFs, downloads, etc.)\n\nFor detailed instructions, see `_posts/POST_ORGANIZATION_GUIDE.md`\n\n## Local Development\n\nTo test the blog locally:\n\n```bash\n# Install dependencies\nbundle install\n\n# Build and serve the site\nbundle exec jekyll serve\n\n# View at http://localhost:4000\n```\n\nTo run a production-style build locally:\n\n```bash\nJEKYLL_ENV=production bundle exec jekyll build --strict_front_matter\n```\n\n## Deployment\n\nThis blog uses the `github-pages` gem for local/runtime parity with GitHub Pages:\n\n1. Push your changes to the repository\n2. GitHub Pages will automatically build and deploy your site\n3. View your blog at `https://teppixdigital.github.io/`\n\nContinuous integration also runs Jekyll validation on every pull request and push to `main`.\n\n## Mermaid Diagrams\n\nPosts support [Mermaid](https://mermaid.js.org/) diagrams. To enable diagrams in a post, add `mermaid: true` to its front matter:\n\n```markdown\n---\nlayout: post\ntitle: \"My Post\"\ndate: 2026-03-28 10:00:00 +0000\nmermaid: true\n---\n\nHere is a diagram:\n\n```mermaid\nflowchart LR\n    A[Start] --\u003e B{Decision}\n    B --\u003e|Yes| C[Do it]\n    B --\u003e|No| D[Skip it]\n```\n```\n\nMermaid JS is only loaded on pages that set `mermaid: true`, keeping other pages fast.\n\n## Customization\n\n- **Site title and description**: Edit `_config.yml`\n- **Styling**: Modify `assets/css/style.css`\n- **Layouts**: Edit files in `_layouts/`\n\n## Google Analytics Integration\n\nThis blog includes privacy-friendly Google Analytics 4 (GA4) integration. To enable tracking:\n\n1. **Create a GA4 Property**:\n   - Go to [Google Analytics](https://analytics.google.com/)\n   - Create a new GA4 property for your website\n   - Get your Measurement ID (format: `G-XXXXXXXXXX`)\n\n2. **Enable Tracking (environment-specific)**:\n   - Keep `_config.yml` committed with an empty default value.\n   - In deployment-specific config (for example `_config.production.yml`), add your Measurement ID:\n   ```yaml\n   google_analytics: \"G-XXXXXXXXXX\"\n   ```\n   - Build with multiple configs when needed:\n   ```bash\n   bundle exec jekyll build --config _config.yml,_config.production.yml\n   ```\n\n3. **Privacy \u0026 Security Features**:\n   - ✅ GA4 doesn't collect IP addresses by default (enhanced privacy)\n   - ✅ Cross-site tracking prevention (SameSite=Lax;Secure cookies)\n   - ✅ Google Signals disabled (no demographics tracking)\n   - ✅ Ad personalization disabled\n   - ✅ Async script loading for better performance\n   - ✅ Conditional loading (only when configured)\n\n4. **Important Notes**:\n   - The `Secure` cookie flag requires HTTPS. Analytics cookies won't be set when testing locally over HTTP (http://localhost:4000), but will work correctly on the live GitHub Pages site (HTTPS).\n   - If your site implements Content Security Policy (CSP), you may need to configure it to allow inline scripts for Google Analytics, or consider implementing nonce-based CSP.\n\n4. **Disable Tracking**:\n   - To disable, leave the `google_analytics` field empty in `_config.yml`\n\n**Note**: Consider adding a privacy policy and cookie notice to your site to inform users about analytics tracking, as required by GDPR and other privacy regulations.\n\n## Contributing\n\nBefore opening a pull request:\n\n1. Install dependencies: `bundle install`\n2. Run build checks: `bundle exec jekyll build --strict_front_matter`\n3. For local preview: `bundle exec jekyll serve`\n4. For new articles, use: `make new-post TITLE=\"Your Post Title\"`\n5. Ensure required post front matter keys are present: `layout`, `title`, `date`\n\n## License\n\nSee LICENSE file for details.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fiamteppei%2Fiamteppei.github.io","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fiamteppei%2Fiamteppei.github.io","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fiamteppei%2Fiamteppei.github.io/lists"}