{"id":28298504,"url":"https://github.com/datum-cloud/datum.net","last_synced_at":"2026-05-01T10:02:14.163Z","repository":{"id":294881058,"uuid":"937874450","full_name":"datum-cloud/datum.net","owner":"datum-cloud","description":"Official Datum Cloud marketing website, from blog content to company handbook, changelog, etc.","archived":false,"fork":false,"pushed_at":"2026-04-20T06:04:23.000Z","size":92317,"stargazers_count":9,"open_issues_count":33,"forks_count":4,"subscribers_count":6,"default_branch":"main","last_synced_at":"2026-04-20T08:11:25.857Z","etag":null,"topics":["datum","design","handbook"],"latest_commit_sha":null,"homepage":"https://www.datum.net","language":"Astro","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/datum-cloud.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","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-02-24T03:43:17.000Z","updated_at":"2026-04-20T05:42:34.000Z","dependencies_parsed_at":"2025-08-04T16:11:18.490Z","dependency_job_id":"b23a7d4c-0ff4-421d-b3ff-41a94a667b48","html_url":"https://github.com/datum-cloud/datum.net","commit_stats":null,"previous_names":["datum-cloud/datum.net"],"tags_count":176,"template":false,"template_full_name":null,"purl":"pkg:github/datum-cloud/datum.net","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/datum-cloud%2Fdatum.net","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/datum-cloud%2Fdatum.net/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/datum-cloud%2Fdatum.net/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/datum-cloud%2Fdatum.net/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/datum-cloud","download_url":"https://codeload.github.com/datum-cloud/datum.net/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/datum-cloud%2Fdatum.net/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":32169657,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-23T02:19:40.750Z","status":"ssl_error","status_checked_at":"2026-04-23T02:17:55.737Z","response_time":53,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"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":["datum","design","handbook"],"created_at":"2025-05-23T06:14:08.702Z","updated_at":"2026-05-01T10:02:14.146Z","avatar_url":"https://github.com/datum-cloud.png","language":"Astro","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Datum Inc. Website\n\nThis is the official website for Datum Inc., built with Astro.\n\n## Table of Contents\n\n- [Getting Started](#getting-started)\n  - [Prerequisites](#prerequisites)\n  - [Installation](#installation)\n  - [Commands](#commands)\n- [Development Environment](#development-environment)\n  - [Development with Docker](#development-with-docker)\n  - [Development with Local Kubernetes](#development-with-local-kubernetes)\n- [Content Authoring](#content-authoring)\n  - [Handbook](#handbook)\n  - [Images](#images)\n  - [Content Management with Front Matter CMS](#content-management-with-front-matter-cms)\n- [API Documentation](#api-documentation)\n  - [Generating API Documentation](#generating-api-documentation)\n  - [Configuration](#configuration)\n  - [Automated Version Updates](#automated-version-updates)\n- [Code Quality \u0026 Testing](#code-quality--testing)\n  - [Code Quality Tools](#code-quality-tools)\n  - [Markdown Linting](#markdown-linting)\n  - [VS Code Setup](#vs-code-setup)\n  - [End-to-End Testing](#end-to-end-testing)\n  - [Ignore Files](#ignore-files)\n- [Production Deployment](#production-deployment)\n  - [Production with Docker](#production-with-docker)\n  - [Docker Configuration Details](#docker-configuration-details)\n  - [Network Configuration](#network-configuration)\n  - [Troubleshooting](#troubleshooting)\n- [Contributing](#contributing)\n- [Resources](#resources)\n\n---\n\n## Getting Started\n\n### Prerequisites\n\n- Node.js (version specified in package.json)\n\n### Installation\n\n1. Install dependencies:\n\n```bash\nnpm install\n```\n\n2. Set up environment variables:\n\n```bash\ncp .env.example .env\n# Edit .env with your configuration\n```\n\n3. Build file in dev mode:\n\n```bash\nnpm run build\n```\n\n4. Start the development server:\n\n```bash\nnpm run dev\n```\n\nFor detailed information about the project structure, see [PROJECT_STRUCTURE.md](./docs/PROJECT_STRUCTURE.md).\n\n### Commands\n\nAll commands are run from the root of the project, from a terminal:\n\n| Command                   | Action                                                                            |\n| :------------------------ | :-------------------------------------------------------------------------------- |\n| `npm install`             | Installs dependencies                                                             |\n| `npm run dev`             | Starts local dev server at `localhost:4321`                                       |\n| `npm run build`           | Build your production site to `./dist/`                                           |\n| `npm run preview`         | Preview your build locally, before deploying                                      |\n| `npm run astro ...`       | Run CLI commands like `astro add`, `astro check`                                  |\n| `npm run astro -- --help` | Get help using the Astro CLI                                                      |\n| `npm run lint`            | Check for linting and formatting issues                                           |\n| `npm run lint:fix`        | Automatically fix linting and formatting issues                                   |\n| `npm run lint:md`         | Check for markdown linting issues                                                 |\n| `npm run lint:md:fix`     | Automatically fix markdown linting issues                                         |\n| `npm run format`          | Format all files using Prettier                                                   |\n| `npm run format:check`    | Check if files are formatted correctly                                            |\n| `npm run typecheck`       | Astro typescript check                                                            |\n| `npm run precommit`       | Typecheck, ESLint, and markdown lint (Husky formats/lints staged files on commit) |\n\n---\n\n## Development Environment\n\n### Development with Docker\n\n#### Docker Prerequisites\n\n- Docker\n- Docker Compose\n\n#### Setup\n\n1. Set up environment variables:\n\n   ```bash\n   cp .env.example .env\n   ```\n\n   Edit `.env` with your configuration.\n\n2. Start the development environment:\n\n   ```bash\n   docker compose up dev\n   ```\n\n   This will:\n   - Build the development image using Node.js 22 Alpine\n   - Mount your local codebase for hot-reloading\n   - Make the app available at http://localhost:4321\n\n3. Development Features:\n   - Hot-reloading enabled\n   - Source code mounted from host\n   - Node modules cached in Docker volume\n   - Full access to development tools\n   - Network access from other devices via host IP\n\n### Development with Local Kubernetes\n\n1. Install [Minikube](https://minikube.sigs.k8s.io/docs/) and start minikube:\n\n```bash\nminikube start\n```\n\n2. Create secret.yaml file separated with this source. Value:\n\n```yaml\napiVersion: v1\nkind: Secret\nmetadata:\n  name: datum-net\n  namespace: datum-net\ntype: Opaque\ndata:\n  POSTGRES_USER:\n  POSTGRES_PASSWORD:\n  APP_ID:\n  APP_INSTALLATION_ID:\n  APP_PRIVATE_KEY:\n```\n\n3. Then apply with command:\n\nCreate namespace:\n\n```bash\nkubectl create namespace datum-net\n```\n\nApply secret:\n\n```bash\nkubectl apply -f config/dev/secret.yaml\n```\n\nApply the kustomize config file:\n\n```bash\nkubectl apply -k config/base\n```\n\nApply the kustomize postgres config file:\n\n```bash\nkubectl apply -k config/dev/postgres-config.yaml\n```\n\n4. Install postgresql helm (example from bitnami source):\n\n```bash\nhelm install postgresql -f config/dev/postgres-values.yaml -n datum-net oci://registry-1.docker.io/bitnamicharts/postgresql\n```\n\n---\n\n## Content Authoring\n\n### Handbook\n\nMain file: `src/content/handbook/index.md`\n\n### Images\n\nImport component:\n\n```astro\nimport Figure from '@components/Figure.astro';\n```\n\nExample in real use: `src/content/blog/from-cage-nuts-to-kubernetes.mdx`\n\n#### Caption + Alignment\n\n```astro\n\u003cFigure title=\"Caption text\" align=\"left/center/right\"\u003e ![Alt text](./path/to/image.jpg) \u003c/Figure\u003e\n```\n\n#### Alignment Options\n\n**Align left:**\n\n```markdown\n![Routing security dashboard UI](/src/content/blog/assets/images/from-cage-3.png#left)\n```\n\n**Align center:**\n\n```markdown\n![Routing security dashboard UI](/src/content/blog/assets/images/from-cage-3.png#center)\n```\n\n**Align right:**\n\n```markdown\n![Routing security dashboard UI](/src/content/blog/assets/images/from-cage-3.png#right)\n```\n\n### Content Management with Front Matter CMS\n\nThis project uses [Front Matter CMS](https://frontmatter.codes/) - a powerful headless CMS that runs directly in VS Code, providing a GUI for managing your Astro content collections.\n\n#### Installation \u0026 Setup\n\n1. Open VS Code\n2. Go to Extensions (⌘+Shift+X on Mac, Ctrl+Shift+X on Windows/Linux)\n3. Search for \"Front Matter CMS\"\n4. Click \"Install\" on the extension by Elio Struyf\n\n**Note**: If the repo includes a `.frontmatter/` configuration, you can use it and skip manual Front Matter project initialization.\n\n#### Available Content Types\n\n| Content Type | Description         | Location                  |\n| ------------ | ------------------- | ------------------------- |\n| `docs`       | Documentation pages | `src/content/docs/`       |\n| `blog`       | Blog posts          | `src/content/blog/`       |\n| `authors`    | Author profiles     | `src/content/authors/`    |\n| `handbook`   | Company handbook    | `src/content/handbook/`   |\n| `changelog`  | Version changelogs  | `src/content/changelog/`  |\n| `features`   | Product features    | `src/content/features/`   |\n| `faq`        | FAQ entries         | `src/content/faq/`        |\n| `categories` | Blog categories     | `src/content/categories/` |\n| `pages`      | Marketing pages     | `src/content/pages/`      |\n| `about`      | About pages         | `src/content/about/`      |\n| `legal`      | Legal documents     | `src/content/legal/`      |\n\n#### Field Groups\n\nThe project uses reusable field groups for complex structures:\n\n| Field Group     | Used In        | Purpose                                        |\n| --------------- | -------------- | ---------------------------------------------- |\n| `og`            | Meta fields    | Open Graph social sharing data                 |\n| `hero`          | Docs, handbook | Hero section with tagline and image            |\n| `social`        | Authors        | Social media links (Twitter, GitHub, LinkedIn) |\n| `price`         | Pricing        | Price structure (badge, amount, note)          |\n| `cta`           | Pricing, pages | Call-to-action buttons                         |\n| `images`        | Pages, about   | Image galleries with alt text                  |\n| `readTheDocs`   | Features       | Documentation links                            |\n| `changelogTags` | Changelog      | Tag entries (fixed/new/changed)                |\n\n#### Front Matter Troubleshooting\n\nIf the Front Matter panel is not showing:\n\n1. Ensure you have a content file open\n2. Check the file is in `src/content/` directory\n3. Try reloading VS Code: `Developer: Reload Window`\n\n---\n\n## API Documentation\n\nThe API reference documentation is auto-generated from the CRD (Custom Resource Definition) source code in the operator repositories.\n\n### API Documentation Prerequisites\n\n- Go (version 1.20+)\n- Node.js (version 18+)\n- curl, unzip (for downloading source archives)\n\n### Generating API Documentation\n\nTo regenerate the API reference documentation:\n\n```bash\nnpm run generate:api-docs\n```\n\nThis single command:\n\n1. Cleans any previous temporary files\n2. Installs the crd-ref-docs tool (if needed)\n3. Downloads the configured operator repositories\n4. Extracts CRD definitions from Go source code\n5. Generates MDX documentation using templates\n6. Outputs to `src/content/docs/docs/api/reference.mdx`\n\nTemporary files are automatically cleaned up at the start of each run.\n\n### Configuration\n\nAPI documentation generation is configured in:\n\n- `.api-docs-config.yaml` - Source repository versions and settings\n- `.crd-ref-docs.yaml` - CRD documentation tool configuration\n- `templates/api-docs/` - MDX templates for documentation rendering\n\n### Automated Version Updates\n\nRenovate automatically:\n\n1. Tracks operator releases\n2. Detects new versions from GitHub releases\n3. Creates a weekly PR (before 3am Monday) with:\n   - Updated versions in `.api-docs-config.yaml`\n   - All operators grouped in a single PR\n\nA GitHub Actions workflow automatically regenerates the API documentation when Renovate opens a PR that modifies `.api-docs-config.yaml`, committing the updated docs to the same PR.\n\nFor manual updates, edit version numbers in `.api-docs-config.yaml` and run `npm run generate:api-docs`.\n\n---\n\n## Code Quality \u0026 Testing\n\n### Code Quality Tools\n\nThis project uses ESLint with Prettier integration for code quality and formatting:\n\n- **ESLint**: For code linting and enforcing code style rules\n- **Prettier**: Integrated with ESLint for code formatting\n- **TypeScript**: For type checking and enhanced IDE support\n- **Markdownlint**: For markdown and MDX file linting\n\nThe configuration supports:\n\n- TypeScript (`.ts`, `.tsx`)\n- JavaScript (`.js`, `.jsx`)\n- Astro (`.astro`)\n- Markdown (`.md`)\n- MDX (`.mdx`)\n- JSON (`.json`)\n\n### Markdown Linting\n\nThe project uses `markdownlint-cli` to ensure consistent markdown formatting across all content files. The linting is specifically configured for MDX files with React components in the `/src/content/` directory.\n\n#### Markdownlint Configuration\n\nThe markdownlint configuration (`.markdownlint.json`) is optimized for MDX and React components:\n\n- Disables line length limits (MD013)\n- Allows inline HTML/JSX (MD033)\n- Flexible heading structure (MD024, MD025, MD026)\n- Supports component-based content (MD036, MD040)\n- Allows dynamic content (MD042, MD047)\n- Flexible list formatting (MD029, MD031, MD032)\n\n#### Markdownlint Usage\n\nTo check markdown files:\n\n```bash\nnpm run lint:md\n```\n\nTo automatically fix markdown issues:\n\n```bash\nnpm run lint:md:fix\n```\n\nThe linter will only check files in the `/src/content/` directory, including:\n\n- Blog posts\n- Documentation\n- Guides\n- Changelog entries\n- Static pages\n\n### VS Code Setup\n\nFor the best development experience, install the following VS Code extensions:\n\n1. [ESLint](https://marketplace.visualstudio.com/items?itemName=dbaeumer.vscode-eslint)\n2. [Prettier](https://marketplace.visualstudio.com/items?itemName=esbenp.prettier-vscode)\n3. [Markdownlint](https://marketplace.visualstudio.com/items?itemName=DavidAnson.vscode-markdownlint)\n4. [Front Matter CMS](https://marketplace.visualstudio.com/items?itemName=eliostruyf.vscode-front-matter) - For content management\n\nThe project includes VS Code settings (`.vscode/settings.json`) that enable:\n\n- Live linting and error detection\n- Format on save\n- Automatic ESLint fixes on save\n- Proper formatting for Astro, TypeScript, JavaScript, and Markdown files\n- TypeScript SDK integration\n\n### End-to-End Testing\n\nThis project uses Playwright for end-to-end testing, providing reliable testing across multiple browsers.\n\n#### E2E Setup\n\n1. Install dependencies:\n\n```bash\nnpm install\n```\n\n2. Install Playwright browsers:\n\n```bash\nnpx playwright install\n```\n\n#### Running Tests\n\n| Command                   | Action                                       |\n| :------------------------ | :------------------------------------------- |\n| `npm run test:e2e`        | Run all tests in headless mode               |\n| `npm run test:e2e:ui`     | Run tests with UI mode (recommended for dev) |\n| `npm run test:e2e:debug`  | Run tests in debug mode                      |\n| `npm run test:e2e:report` | Show the last test report                    |\n\n#### Test Structure\n\nTests are located in the `tests/e2e` directory:\n\n```\ntests/\n└── e2e/\n    ├── home.spec.ts    # Homepage tests\n    └── ...            # Other test files\n```\n\n#### Test Reports\n\n- Test reports are generated in the `playwright-report` directory\n- Screenshots and videos of failures are saved in `test-results`\n- Reports are not committed to the repository (see `.gitignore`)\n\n#### Writing Tests\n\nExample test structure:\n\n```typescript\nimport { test, expect } from '@playwright/test';\n\ntest.describe('Feature Name', () =\u003e {\n  test('should do something specific', async ({ page }) =\u003e {\n    await page.goto('/');\n    // Test implementation\n  });\n});\n```\n\n#### CI/CD Integration\n\nThe tests are configured to run in CI environments:\n\n- Retries failed tests in CI\n- Generates HTML reports\n- Takes screenshots on failures\n- Supports parallel test execution\n\n### Ignore Files\n\nThe project includes configuration files to ignore certain files and directories:\n\n- `.prettierignore`: Specifies files and directories to be ignored by Prettier\n- `.eslintignore`: Specifies files and directories to be ignored by ESLint\n\nThese files ignore:\n\n- Build output (`dist/`, `.astro/`)\n- Dependencies (`node_modules/`)\n- Generated files (`*.generated.*`, `*.min.*`)\n- Log files\n- Environment files (except `.env.example`)\n- Editor directories and files\n- Package manager files\n- Public assets\n\n---\n\n## Production Deployment\n\n### Production with Docker\n\n1. Build and run the production environment:\n\n   ```bash\n   docker compose up prod\n   ```\n\n   This will:\n   - Build an optimized production image\n   - Run the application in production mode\n   - Enable automatic restarts unless stopped\n   - Make the app available at http://localhost:4321\n\n2. Manual production deployment:\n\n   ```bash\n   # Build the production image\n   docker build -t datum-website --target production .\n\n   # Run the production container\n   docker run -p 4321:4321 \\\n     -e NODE_ENV=production \\\n     -e SITE_URL=your-site-url \\\n     datum-website\n   ```\n\n### Docker Configuration Details\n\nThe setup uses a multi-stage Dockerfile:\n\n1. Base stage (`node:22-alpine`)\n   - Minimal Alpine Linux with Node.js 22\n   - Common workspace setup\n\n2. Development stage\n   - Full development dependencies\n   - Source code mounting\n   - Hot-reload enabled\n   - Development-specific configurations\n\n3. Production stage\n   - Multi-stage build for optimization\n   - Only production dependencies\n   - Pre-built assets\n   - Minimal final image size\n\n### Network Configuration\n\n- Host: `0.0.0.0` (allows external access)\n- Port: 4321 (configurable via environment)\n- Docker network: `datum-network` (bridge mode)\n- Volume mounts (development):\n  - `.:/src`: Source code\n  - `/app/node_modules`: Dependencies\n\n### Troubleshooting\n\n1. If the development server isn't accessible:\n\n   ```bash\n   # Rebuild the development image\n   docker compose up dev --build\n   ```\n\n2. To view logs:\n\n   ```bash\n   # Development logs\n   docker compose logs dev\n\n   # Production logs\n   docker compose logs prod\n   ```\n\n3. To clean up:\n\n   ```bash\n   # Stop and remove containers\n   docker compose down\n\n   # Remove volumes too\n   docker compose down -v\n   ```\n\n---\n\n## Contributing\n\nWe welcome contributions! Please see our [Contributing Guide](./docs/CONTRIBUTING.md) for details on our code of conduct, development setup, and the process for submitting pull requests.\n\n---\n\n## Resources\n\n- [Front Matter CMS Documentation](https://frontmatter.codes/docs)\n- [Astro Content Collections](https://docs.astro.build/en/guides/content-collections/)\n- [Zod Schema Validation](https://zod.dev/)\n- [Project Content Structure](./docs/CONTENT_STRUCTURE.md)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdatum-cloud%2Fdatum.net","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fdatum-cloud%2Fdatum.net","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdatum-cloud%2Fdatum.net/lists"}