{"id":13783420,"url":"https://github.com/redwoodjs/example-blog","last_synced_at":"2025-05-11T19:30:46.973Z","repository":{"id":42985578,"uuid":"210903466","full_name":"redwoodjs/example-blog","owner":"redwoodjs","description":"Example Blog app written with Redwood","archived":true,"fork":false,"pushed_at":"2022-04-04T06:50:59.000Z","size":16562,"stargazers_count":104,"open_issues_count":13,"forks_count":36,"subscribers_count":8,"default_branch":"main","last_synced_at":"2025-05-07T08:28:59.078Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"redwoodjs-example-blog.vercel.app","language":"JavaScript","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/redwoodjs.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}},"created_at":"2019-09-25T17:33:35.000Z","updated_at":"2025-01-31T16:42:05.000Z","dependencies_parsed_at":"2022-08-12T15:40:13.307Z","dependency_job_id":null,"html_url":"https://github.com/redwoodjs/example-blog","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/redwoodjs%2Fexample-blog","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/redwoodjs%2Fexample-blog/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/redwoodjs%2Fexample-blog/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/redwoodjs%2Fexample-blog/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/redwoodjs","download_url":"https://codeload.github.com/redwoodjs/example-blog/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":253610881,"owners_count":21935775,"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":[],"created_at":"2024-08-03T19:00:21.099Z","updated_at":"2025-05-11T19:30:46.073Z","avatar_url":"https://github.com/redwoodjs.png","language":"JavaScript","funding_links":[],"categories":["Official"],"sub_categories":["Example Applications"],"readme":"## RedwoodJS Example Blog [Pre 1.0 Release]\n\n\u003e ⚠️ This is an original example project created for the release of Redwood v0.1. \n\u003e It's in need of some TLC via a re-write. Until that time, we recommend checking out our [other example projects](https://github.com/redwoodjs?q=example-). \n\n\n![RedwoodJS Example Blog Screenshot](https://user-images.githubusercontent.com/300/67903394-aced3080-fb28-11e9-85bb-b5fdbb4b6c34.png)\n\nYou can view this app live at:\n- Netlify Deploy: https://redwood-example-blog.netlify.com\n- Vercel Deploy: https://redwoodjs-example-blog.vercel.app\n\n\u003e Note: The Authentication section of this walkthrough uses Netlify Identity, which will _only_ work on Netlify. If you wish to use Vercel, you can simply replace the Netlify Identity provider with another provider supported by [Redwood Auth](https://redwoodjs.com/docs/authentication). Or you can start the project from the [`vercel-deploy` branch](https://github.com/redwoodjs/example-blog/tree/vercel-deploy) of this repository.\n\n## Table of Contents\n\n- [RedwoodJS Example Blog](#redwoodjs-example-blog)\n- [Table of Contents](#table-of-contents)\n- [Overview](#overview)\n- [Getting Started](#getting-started)\n  - [Installation](#installation)\n  - [Deployment](#deployment)\n    - [Enabling Authentication](#enabling-authentication)\n    - [Enabling Identity on Netlify](#enabling-identity-on-netlify)\n    - [Enabling Image Uploads](#enabling-image-uploads)\n- [TODO](#todo)\n\n## Overview\n\nHere is a full-featured blog engine written with RedwoodJS. It includes:\n\n* Listing all blog posts with first paragraph summaries and pagination (the homepage)\n* Reading a single, full blog post\n* Searching for blog posts by keyword\n* Displaying all posts with a given tag\n* Contact form\n* Fully responsive at various viewport sizes\n\nThe admin includes:\n\n* User authentication\n* Create a new blog post with:\n    * Title\n    * Slug (URL)\n    * Author\n    * Body\n    * Tags\n    * Splash image\n* Edit existing blog post\n* Delete a blog post\n* Mark a new post as a Draft and not display it live\n* Publish a post live\n* Unpublish a post (puts it back to DRAFT status)\n\nOn the tech side:\n\n* Data stored in a SQL database (SQLite locally)\n* User authentication using [Netlify Identity](https://docs.netlify.com/visitor-access/identity/)\n* Image uploads and CDN via [Filestack](https://filestack.com)\n* CSS styling via [TailwindCSS](https://tailwindcss.com)\n* Contact forms are handled by [Netlify Forms](https://www.netlify.com/products/forms/)\n\n## Getting Started\n\n### Installation\n\nClone the repo:\n\n    git clone https://github.com/redwoodjs/example-blog.git\n    cd example-blog\n\nInstall dependencies:\n\n    yarn install\n\nCreate a local SQLite database and seed it with a few blog posts:\n\n    yarn redwood prisma migrate dev\n    yarn redwood prisma db seed\n\nNow you should be able to start a development server:\n\n    yarn redwood dev\n\nAssuming everything worked, open a browser to http://localhost:8910 and you should\nbe seeing the homepage (similar to the screenshot above).\n\n### Deployment\n\nSee the section on [Deployment](https://redwoodjs.com/tutorial/deployment) in the [Redwood Tutorial](https://redwoodjs.com/tutorial).\n\n#### Enabling Authentication\n\n\u003e We're working on supporting the `netlify dev` command properly with Redwood, which is required to use Netlify Identity in a local dev environment. The following instructions will not work until this fix is complete.\n\nCopy the `.env.defaults` file to a new file `.env` and edit it, setting the `USE_AUTHENTICATION` variable to `true`.\n\n#### Enabling Identity on Netlify\n\nYou'll need to create a new site on Netlify so that you can enable Identity and\ngive the Identity API Endpoint to your development instance of the blog.\n\nIf you don't have it already, install the Netlify CLI tools:\n\n    yarn global add netlify-cli\n\nLog in with your Netlify credentials:\n\n    netlify login\n\nCreate a new site:\n\n    netlify init --manual\n\nNow you have two paths:\n\n1. Find and link to the existing site you have deployed\n2. Choose `Create \u0026 configure a new site`, choose which team to associate this new site with (if you have more than one). You can enter a `Site name` or just hit ENTER to get a random one. You can enter `n`\nwhen asked if you want to continue.\n\nGo to netlify.com and find your site. Click on the Identity link and the Enable Identity button:\n\n![Netlify Screenshot](https://user-images.githubusercontent.com/300/67904407-854b9780-fb2b-11e9-940e-ddf2c7a36a47.png)\n\nNow copy and paste the API endpoint URL that's displayed once the screen refreshes:\n\n![Netlify Identity URL](https://user-images.githubusercontent.com/300/67904521-d196d780-fb2b-11e9-9f17-f2f668d1d29e.png)\n\nBack to your local development machine, head to http://localhost:8910/admin and you'll be prompted with the login popup. Enter the URL that you just copied and click **Set site's URL**:\n\n\u003cimg src=\"https://user-images.githubusercontent.com/300/67904594-10c52880-fb2c-11e9-8810-28687ecefa96.png\" width=\"400\"\u003e\n\nThe popup should refresh and now you'll see a login box. But, we don't have any users yet. Back over to Netlify, click the **Invite users** button and send yourself an invite:\n\n![image](https://user-images.githubusercontent.com/300/67904786-a9f43f00-fb2c-11e9-9a4a-ecc672dfab93.png)\n\n\u003cimg src=\"https://user-images.githubusercontent.com/300/67904814-be383c00-fb2c-11e9-851a-89ccd652811f.png\" width=\"400\"\u003e\n\nYou'll get an email with a link to accept the invite. However, this link won't work: it's trying to go to the Netlify URL, which doesn't have a site on it yet. So after clicking the link and getting an error, change the URL to be http://localhost:8910 *but make sure to keep the invite token at the end*. For example, if you are sent to\n\n    https://nostalgic-dijkstra-23eaba.netlify.com/#invite_token=8-TFgNesyzhIn8LnXv3\n\nRewrite that URL to:\n\n    http://localhost:8910/#invite_token=8-TFgNesyzhIn8LnXv3\n\nYou should see the login popup with a password input to complete your account. Fill it in and submit and now you should get a message saying you are logged in. Head back to the admin http://localhost:8910/admin and you should have access (finally!)\n\n#### Enabling Image Uploads\n\nThe blog uses an external service, [Filestack](https://filestack.com) to handle image\nuploads. If you want to be able to upload images in local development you'll need to\ncreate a free account at Filestack and copy the API key. You get 100 uploads per\nmonth on their free account which should be plenty to test with.\n\nOnce you have logged into Filestack copy the API key shown at the top right of the dashboard:\n\n![Filestack screenshot](https://user-images.githubusercontent.com/300/67905641-40296480-fb2f-11e9-8f86-94fd6ddbb12d.png)\n\nIf you haven't already, copy the `.env.example` file in the root of the blog to a new\nfile named `.env`. Edit the `FILESTACK_API_KEY` variable to be equal to the one you\njust copied. Save `.env` and restart your `yarn dev` process. Now when creating a\nnew blog post http://localhost:8910/admin/new you should see a filepicker towards the\nbottom of the form:\n\n![New post screenshot](https://user-images.githubusercontent.com/300/67907861-9f3ea780-fb36-11e9-8bca-4e71c38d47e3.png)\n\n## TODO\n\n* Remove file picker if ENV var not set, with instructions for enabling\n* Add instructions for enabling Authentication\n* In public view don't include posts in Draft state\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fredwoodjs%2Fexample-blog","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fredwoodjs%2Fexample-blog","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fredwoodjs%2Fexample-blog/lists"}