{"id":13789596,"url":"https://github.com/letterpad/letterpad","last_synced_at":"2025-05-16T13:06:48.169Z","repository":{"id":37271579,"uuid":"81861029","full_name":"letterpad/letterpad","owner":"letterpad","description":"A publishing platform for creative people.","archived":false,"fork":false,"pushed_at":"2024-08-29T15:42:18.000Z","size":34260,"stargazers_count":782,"open_issues_count":27,"forks_count":80,"subscribers_count":9,"default_branch":"master","last_synced_at":"2025-05-10T18:24:09.113Z","etag":null,"topics":["blogging-system","cms","graphql","journalism","nextjs","react","reactjs","single-page-app","tailwindcss"],"latest_commit_sha":null,"homepage":"https://letterpad.app","language":"TypeScript","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/letterpad.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":".github/FUNDING.yml","license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":"SECURITY.md","support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null},"funding":{"github":null,"patreon":null,"open_collective":"letterpad","ko_fi":null,"tidelift":null,"community_bridge":null,"liberapay":null,"issuehunt":null,"otechie":null,"custom":null}},"created_at":"2017-02-13T19:10:53.000Z","updated_at":"2025-04-29T00:38:40.000Z","dependencies_parsed_at":"2024-01-29T21:45:00.604Z","dependency_job_id":"dcde53c4-7139-4a6a-998f-8953d1782ffe","html_url":"https://github.com/letterpad/letterpad","commit_stats":{"total_commits":1402,"total_committers":19,"mean_commits":73.78947368421052,"dds":0.6319543509272467,"last_synced_commit":"c723ef1346f33103a1b887f30fbffa3483786b37"},"previous_names":["ajaxtown/letterpad"],"tags_count":27,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/letterpad%2Fletterpad","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/letterpad%2Fletterpad/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/letterpad%2Fletterpad/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/letterpad%2Fletterpad/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/letterpad","download_url":"https://codeload.github.com/letterpad/letterpad/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":254270994,"owners_count":22042934,"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","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":["blogging-system","cms","graphql","journalism","nextjs","react","reactjs","single-page-app","tailwindcss"],"created_at":"2024-08-03T22:00:29.247Z","updated_at":"2025-05-16T13:06:48.096Z","avatar_url":"https://github.com/letterpad.png","language":"TypeScript","funding_links":["https://opencollective.com/letterpad"],"categories":["TypeScript","tailwindcss","Uncategorized"],"sub_categories":["Uncategorized"],"readme":"## Table of Contents\n\n- [Letterpad](#letterpad)\n  - [Features](#features)\n  - [Demo](#demo)\n- [How to Install](#how-to-install)\n  - [Development](#development)\n  - [Production](#production)\n    - [Using Docker](#using-docker)\n    - [Configuration Options](#configuration-options)\n  - [URL and Port](#url-and-port)\n- [Letterpad Admin](#letterpad-admin)\n- [Letterpad Client](#letterpad-client)\n- [Contribute](#contribute)\n\n# Letterpad\n\nLetterpad is a comprehensive blog publishing engine that simplifies the process of managing and publishing content for your blog or website.\n\n\u003cp align=\"center\"\u003e\n  \u003cimg src=\"https://user-images.githubusercontent.com/1502352/213929848-293a0de7-d935-4744-859e-c6572dd97d10.png\" width=\"600\" align=\"center\"\u003e\n  \u003cp align=\"center\"\u003eAdmin Dashboard\u003c/p\u003e\n\u003c/p\u003e\n\n---\n\n\u003cp align=\"center\"\u003e\n  \u003cimg src=\"https://user-images.githubusercontent.com/1502352/213930321-c6bec8c1-0e22-4545-ae51-c336211453d0.png\" width=\"600\"\u003e\n  \u003cp align=\"center\"\u003eWebsite\u003c/p\u003e\n\u003c/p\u003e\n\n## Features\n\n- **Fully Developed Admin Dashboard and Website**: Get started quickly with a ready-to-use admin dashboard and a customizable website.\n- **Domain Mapping**: Easily map your custom domain to your Letterpad blog.\n- **Inline Editing**: Edit your content directly on the website with inline editing capabilities.\n- **Grid and List Layout**: Choose between grid and list layouts for displaying your content.\n- **Customizable Brand Color**: Personalize your blog with a customizable brand color.\n- **Database Options**: Use either MySQL or SQLite3 for your database.\n- **Integrations**: Seamlessly integrate with Cloudinary and Unsplash for media management.\n- **Multi-User Install**: Letterpad supports multi-user installations by default.\n- **Creatives - Page Builder**: Create beautiful photostories, portfolios, photoblogs, and art/design showcases with the Creatives page builder.\n- **Grammar Checker**: Integration with Grammarly ensures your content is free of grammatical errors.\n- **SEO Optimization**: Built-in SEO features help boost your blog's visibility.\n- **Server Rendered Blog**: Enjoy the benefits of a server-rendered blog for optimal performance.\n- **Themes**: Choose from three themes and contribute your own designs.\n\n## Demo\n\nExplore Letterpad's capabilities in action by visiting the [demo](https://demo.letterpad.app).\n\n# How to Install\n\nTo set up Letterpad on your system, follow these steps:\n\n1. Clone this project:\n\n   ```sh\n   git clone git@github.com:letterpad/letterpad.git\n   ```\n\n2. Change to the project directory:\n\n   ```sh\n   cd letterpad\n   ```\n\nBefore you proceed, ensure you've copied `apps/admin/.env.sample` to `apps/admin/.env` and set the `SECRET_KEY` to a unique value.\n\n## Development\n\n```sh\nbun install\nbun run build\n\n# Copy apps/admin/.env.sample to apps/admin/.env\n# Change the secret key in .env file.\nbun run seed\nbun run dev\n```\n\n## Production\n\n```sh\nbun install\nbun run build\n\n# Copy apps/admin/.env.sample to apps/admin/.env\n# Change the secret key in .env file.\nbun run seed\nbun run start\n```\n\n\u003e **❗ Note**: Copy `apps/client/.env.sample` to `apps/client/.env`. Your blog will not work without setting the CLIENT_ID in `apps/client/.env`.  You can find the CLIENT_ID by logging into your admin dashboard and navigating to Settings \u003e Keys.\n\n### Using Docker\n\nIf you prefer using Docker for deployment, you can run Letterpad with the following command:\n\n```sh\ndocker run \\\n-v 'data:/app/apps/admin/prisma/sqlite/data' \\\n-p 3001:3001 \\\n-p 3000:3000 \\\n-e DATABASE_URL='file:data/letterpad.sqlite' \\\n-e SECRET_KEY='provide-a-secret-key' \\\n-e EMAIL=\"xxx@xxx.com\" \\\n-e PASSWORD='xxxxxxxxxxx' \\\nabhisheksaha11/letterpad\n```\n\n\u003e **IMPORTANT!!!** - \n\u003e The client uses `apps/client/.env` to connect with the API. This file contains the CLIENT_TOKEN, which you can find by logging into your admin dashboard and navigating to Settings \u003e Keys. If you've changed the SECRET_KEY, make sure to update the CLIENT_ID.\n\n### Configuration Options\n\nLetterpad can be configured using environment variables. Here are the available options:\nHere's the provided information converted into a table format:\n\n| Configuration Options              | Description                                       |\n| ---------------------------------- | ------------------------------------------------- |\n| **User Configuration**             |                                                 |\n| EMAIL                              | The email of the first user. (Docker only)        |\n| PASSWORD                           | The password of the first user. (Docker only)      |\n| **Security Configuration**         |                                                 |\n| SECRET_KEY                         | A secret key used for encrypting passwords and emails. |\n| **Database Configuration**         |                                                 |\n| DATABASE_URL                       | Database connection URL. You can use either SQLite or MySQL. |\n| **Spam Protection**                |                                                 |\n| RECAPTCHA_KEY_CLIENT               | Google reCAPTCHA client key.                     |\n| RECAPTCHA_KEY_SERVER               | Google reCAPTCHA server key.                     |\n| **Email Configuration**            |                                                 |\n| GMAIL_USER                         | Gmail email address.                             |\n| GMAIL_PASSWORD                     | Gmail password.                                  |\n| SENDER_EMAIL                       | Email address for sending emails.                |\n| **Media Management Configuration (Cloudinary)** |                                         |\n| CLOUDINARY_KEY                     | Cloudinary API key.                              |\n| CLOUDINARY_NAME                    | Cloudinary cloud name.                           |\n| CLOUDINARY_SECRET                  | Cloudinary API secret.                           |\n| **Unsplash Integration**           |                                                 |\n| UNSPLASH_CLIENT_ID                 | Unsplash client ID.                              |\n| **Debugging**                      |                                                 |\n| DEBUG                              | Enable debugging.                                |\n\n## URL and Port\n\nBy default, the admin panel runs on port 3000, and the client runs on port 3001.\n\n- Admin: [http://localhost:3000/admin](http://localhost:3000/admin)\n- Client: [http://localhost:3001](http://localhost:3001)\n\n## Letterpad Admin\n\nFor more information about configuring the admin panel, refer to this [folder](https://github.com/letterpad/letterpad/tree/master/apps/admin).\n\n## Letterpad Client\n\nThe Letterpad client (public) app can be found inside `apps/client`.\n\nDemo: [https://demo.letterpad.app](https://demo.letterpad.app)\n\nLetterpad Admin provides a client key that can be found in settings. If you want to host the client on a different domain, set this client_key in `apps/client/next.config.js`.\n\n## Contribute\n\nYou are welcome to contribute to the project. If you encounter any bugs or have feature requests, please create an issue or submit a pull request. Feel free to join our [Discord channel](https://discord.gg/n89rCNnzRw) to connect with the community and stay updated on the project's development.","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fletterpad%2Fletterpad","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fletterpad%2Fletterpad","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fletterpad%2Fletterpad/lists"}