Git repos for everyone. Define a schema, get an app.
Daylight is a web application that reads a YAML schema from any GitHub repository and generates a workspace for non-developers — tables, kanban boards, document editors, and review workflows — all backed by git commits and pull requests.
Your team gets a real application. Your repo stays the source of truth.
git clone https://github.com/dvelton/daylight.git
cd daylight
npm install
cp .env.example .env.local
# Fill in GITHUB_ID, GITHUB_SECRET, and NEXTAUTH_SECRET
npm run devTo get GitHub OAuth credentials, create an OAuth App with callback URL http://localhost:3000/api/auth/callback/github.
Generate a NextAuth secret:
openssl rand -base64 32Create .github/daylight.yml in any GitHub repo:
name: "Team Knowledge Base"
content_types:
article:
name: "Article"
folder: "articles"
format: "markdown"
fields:
title:
type: "string"
required: true
status:
type: "select"
options: ["draft", "review", "published"]
default: "draft"
author:
type: "string"
views:
- id: "all-articles"
name: "All Articles"
type: "table"
content_type: "article"
columns: ["title", "status", "author"]
- id: "article-board"
name: "Article Board"
type: "board"
content_type: "article"
group_by: "status"
workflows:
- id: "article-review"
content_type: "article"
transitions:
- from: "draft"
to: "review"
label: "Submit for Review"
action: "pull_request"
- from: "review"
to: "published"
label: "Approve & Publish"
action: "merge"Navigate to http://localhost:3000, sign in with GitHub, select your repo, and your workspace appears.
Content lives in your repo as markdown files with YAML frontmatter:
---
title: "Onboarding Guide"
status: "published"
author: "Jane"
---
# Onboarding Guide
Welcome to the team...Daylight reads the schema to understand what's in the repo and how to present it. When users create or edit content through the UI, Daylight writes commits. When they submit content for review, Daylight creates pull requests. The repo is always the source of truth.
| You do this in Daylight | Git does this underneath |
|---|---|
| Save | Commit to branch |
| Submit for Review | Create pull request |
| Approve | Merge pull request |
| View History | Browse commit log |
| Field | Type | Required | Description |
|---|---|---|---|
name |
string | yes | Workspace display name |
description |
string | no | Short description |
content_types |
object | yes | Map of content type definitions |
views |
array | yes | List of view configurations |
workflows |
array | no | List of workflow definitions |
Each key in content_types is the type ID (used in URLs and references).
| Field | Type | Required | Description |
|---|---|---|---|
name |
string | yes | Display name |
folder |
string | yes | Repo folder where files live |
format |
string | yes | Always "markdown" |
fields |
object | yes | Map of field definitions |
Each key in fields is the field ID (used in frontmatter and columns).
| Field | Type | Required | Description |
|---|---|---|---|
type |
string | yes | One of: string, text, number, boolean, date, select, list |
required |
boolean | no | Whether the field must have a value |
default |
varies | no | Default value for new items |
options |
string[] | select only | Available options for select fields |
| Field | Type | Required | Description |
|---|---|---|---|
id |
string | yes | Unique view ID (used in URLs) |
name |
string | yes | Display name in sidebar |
type |
string | yes | table, board, or calendar |
content_type |
string | yes | Which content type to display |
Additional fields by view type:
Table: columns (string array), default_sort (object with field and direction)
Board: group_by (string — must reference a select field)
Calendar: date_field (string — must reference a date field)
| Field | Type | Required | Description |
|---|---|---|---|
id |
string | yes | Unique workflow ID |
content_type |
string | yes | Which content type this applies to |
transitions |
array | yes | List of allowed state transitions |
Each transition:
| Field | Type | Required | Description |
|---|---|---|---|
from |
string or string[] | yes | Source status value(s) |
to |
string | yes | Target status value |
label |
string | yes | Button label in UI |
action |
string | yes | pull_request, merge, or commit |
The schemas/ directory includes ready-to-use schemas:
- knowledge-base — Articles with draft/review/published workflow
- project-tracker — Tasks with kanban board and priority views
- policy-library — Organizational policies with approval workflows and category grouping
Copy any schema's .github/daylight.yml into your repo to get started.
Want to contribute a schema? Copy schemas/_template/, customize it, and open a PR. See CONTRIBUTING.md for details.
- Next.js (App Router)
- TypeScript
- Tailwind CSS
- NextAuth.js (GitHub OAuth)
- Octokit (GitHub API)
- gray-matter (frontmatter parsing)
MIT