diff --git a/examples/github-appcards/README.md b/examples/github-appcards/README.md
index 347497077..54df557e5 100644
--- a/examples/github-appcards/README.md
+++ b/examples/github-appcards/README.md
@@ -1,82 +1,58 @@
-## GitHub app cards
+# GitHub App Cards Miro app
This full-stack example shows how to build an integration with GitHub that syncs data between GitHub issues and Miro app cards.
-💡 Check the complete tutorial: [Enable 2-way sync between app cards and GitHub cards](https://developers.miro.com/docs/enable-2-way-sync-between-app-cards-and-github-cards)
+⚠️ Only deprecated "Classic" GitHub projects work with this app. This means that you cannot connect this app to your own repo unless you have a deprecated "Classic" GitHub project. This is why all of the issues are fetched / stored in this
+[public Miro classic GitHub project](https://github.com/bishopwm/github-cards/projects/1). ⚠️
-** ℹ Note**:
+# 👨🏻💻 App Demo
-- We recommend a Chromium-based web browser for local development with HTTP. \
- Safari enforces HTTPS; therefore, it doesn't allow localhost through HTTP.
-- All examples use `npm` as a package manager and `npx` as a package runner. \
- If you prefer, you can install and use equivalent alternatives, such as `yarn` or `pnpm`.
-- For more information about implementing [drag and drop](https://developers.miro.com/docs/add-drag-and-drop-to-your-app), visit our [developer documentation](https://developers.miro.com).
+https://github.com/miroapp/app-examples/assets/10428517/e2c7b34a-e97d-453e-b64b-f72d0bda643b
-### About the app
+# 📒 Table of Contents
-This full-stack app shows how to build an integration with GitHub Projects that enables a 2-way sync data flow between GitHub issues and Miro app cards.
+- [Included Features](#features)
+- [Tools and Technologies](#tools)
+- [Prerequisites](#prerequisites)
+- [Associated Developer Tutorial](#tutorial)
+- [Run the app locally](#run)
+- [Folder Structure](#folder)
+- [Contributing](#contributing)
+- [License](#license)
-This app is bootstrapped using [create-miro-app](https://www.npmjs.com/package/create-miro-app). It uses React, Typescript, and Vite.
+# ⚙️ Included Features
-To modify the `vite.config.js` configuration, see the [Vite documentation](https://vitejs.dev/guide/).
+- [Miro Web SDK](https://developers.miro.com/docs/web-sdk-reference)
+ - [miro.board.getById()](https://developers.miro.com/docs/board_board#getbyid)
+ - [miro.board.ui.openPanel(options)](https://developers.miro.com/docs/ui_boardui#openpanel)
+ - [miro.board.ui.closeModal()](https://developers.miro.com/docs/ui_boardui#closemodal)
+ - [miro.board.createAppCard()](https://developers.miro.com/docs/websdk-reference-board#createappcard)
+ - [miro.board.getInfo()](https://developers.miro.com/docs/websdk-reference-board#getinfo)
+ - [miro.board.viewport.zoomTo()](https://developers.miro.com/docs/websdk-reference-viewport#zoomto)
-### How to start locally
+# 🛠️ Tools and Technologies
-1. Run `npm install` to install dependencies.
-2. Add a `.env` file with the required environment variables (See example at the end of this article).
-3. Run `npm start` to start developing. \
- Your URL should be similar to this example:
- ```
- http://localhost:3000
- ```
-4. Open the [app manifest editor](https://developers.miro.com/docs/manually-create-an-app#step-2-configure-your-app-in-miro).\
- In the app manifest editor, configure the app as follows:
- - [`sdkUri`](https://developers.miro.com/docs/app-manifest#sdkuri): assign `http://localhost:3000` as a value for this property. \
- It defines the entry point of the app, and it corresponds to the URL of the server that the app runs on.
- - [`redirectUris`](https://developers.miro.com/docs/app-manifest#redirecturis): assign `http://localhost:3000/authorize` as a value for this property. \
- It defines the redirect URL that starts the OAuth 2.0 code grant flow for the REST API.
- - [`scopes`](https://developers.miro.com/docs/app-manifest#scopes): add the permission scopes that users need to grant the app when they install it. \
- To enable the app to read from and write to the board, add the following permissions:
- - `boards:read`
- - `boards:write`
-5. Open a board: you should see your app in the apps toolbar or in the apps panel.
+- [React](https://react.dev/)
+- [Netlify](https://www.netlify.com/)
+- [Vite](https://vitejs.dev/)
-### How to build the app
+# ✅ Prerequisites
-- Run `npm run build`. \
- This generates a static output inside `dist/`, which you can host on a static hosting service.
+- You have a [Miro account](https://miro.com/signup/).
+- You're [signed in to Miro](https://miro.com/login/).
+- Your Miro account has a [Developer team](https://developers.miro.com/docs/create-a-developer-team).
+- Your development environment includes [Node.js 14.13](https://nodejs.org/en/download) or a later version.
+- GitHub Account and [access token](https://github.com/settings/tokens).
+- [Supabase account](https://supabase.com/) and database.
-### Folder structure
+# 📖 Associated Developer Tutorial
-The structure below outlines the most important files in the project used for its core functionality.
-
-```
-.
-├── .github
-├── netlify
-├── src
-│ └── assets
-│ └── style.css <-- CSS styles for the app.
-| └── components <-- Folder of all UI components used in the app.
-| └── utils
-│ └── github.ts <-- Utility functions for interacting with the GitHub API.
-│ miro.ts <-- Utility functions for interacting with the Miro Web SDK and REST API.
-│ supabase.ts <-- Main entry for interacting with Supabase.
-│ └── app.tsx <-- The main entry. Contains structure for the sidebar when launched.
-│ appcard-modal.tsx <-- The main entry for the modal that appears when an app card is expanded.
-│ constants.ts <-- A collection of static variables used throughout the app.
-│ index.ts <-- Initializes app, and contains logic for opening the app from the sidebar and expanding an app card.
-│ modal.tsx <-- The main entry for the modal that appears when selecting a GitHub issue to import.
-├── app.html <-- The app itself. This is loaded on the board inside 'app.tsx'.
-├── appcard-modal.html <-- The app card modal itself. This is loaded on the board inside the 'appcard-modal.tsx'.
-├── index.html <-- The app entry point. This is the value you assign to 'sdkUri' in the app manifest file.
-└── modal.html <-- The modal itself. This is loaded on the board inside the 'modal.tsx'.
-```
+> To view a more in depth developer tutorial
+> of this app (including code explanations) see the [GitHub app cards 2-way sync tutorial](https://developers.miro.com/docs/enable-2-way-sync-between-app-cards-and-github-cards) on Miro's Developer documentation.
-## Required Environment Variables
+# 🏃🏽♂️ Run the app locally
-To run the app, Vite loads an `.env` file with the [environment variables](https://vitejs.dev/guide/env-and-mode.html#env-files).
-Use the commented example below to create your `.env` file.
+1. Create a `.env` file and add in the associated env variables as documented below:
```.env
# Generate an access token in GitHub, and enter the value here.
@@ -115,3 +91,68 @@ MIRO_CLIENT_SECRET=
# https://developers.miro.com/reference/authorization-flow-for-expiring-access-tokens
MIRO_REDIRECT_URI=
```
+
+2. Run `npm install` to install dependencies.
+3. Run `npm start` to start developing. \
+ Your URL should be similar to this example:
+ ```
+ http://localhost:3000
+ ```
+4. Open the [app manifest editor](https://developers.miro.com/docs/manually-create-an-app#step-2-configure-your-app-in-miro) by clicking **Edit in Manifest**. \
+ In the app manifest editor, configure the app as follows and then `click save`.
+
+```yaml
+# See https://developers.miro.com/docs/app-manifest on how to use this
+appName: GitHub App Cards
+sdkUri: "http://localhost:3000"
+redirectUris:
+ - http://localhost:3000/authorize
+scopes:
+ - boards:read
+ - boards:write
+```
+
+5. Go back to your app home page, and under the `Permissions` section, you will see a blue button that says `Install app and get OAuth token`. Click that button. Then click on `Add` as shown in the video below. In the video we install a different app, but the process is the same regardless of the app.
+
+> ⚠️ We recommend to install your app on a [developer team](https://developers.miro.com/docs/create-a-developer-team) while you are developing or testing apps.⚠️
+
+https://github.com/miroapp/app-examples/assets/10428517/1e6862de-8617-46ef-b265-97ff1cbfe8bf
+
+6. Go to your developer team, and open your boards.
+7. Click on the plus icon from the bottom section of your left sidebar. If you hover over it, it will say `More apps`.
+8. Search for your app `GitHub App Cards` or whatever you chose to name it. Click on your app to use it, as shown in the video below. In the video we search for a different app, but the process is the same regardless of the app.
+
+https://github.com/horeaporutiu/app-examples-template/assets/10428517/b23d9c4c-e785-43f9-a72e-fa5d82c7b019
+
+# 🗂️ Folder structure
+
+```
+.
+├── .github
+├── netlify
+├── src
+│ └── assets
+│ └── style.css <-- CSS styles for the app.
+| └── components <-- Folder of all UI components used in the app.
+| └── utils
+│ └── github.ts <-- Utility functions for interacting with the GitHub API.
+│ miro.ts <-- Utility functions for interacting with the Miro Web SDK and REST API.
+│ supabase.ts <-- Main entry for interacting with Supabase.
+│ └── app.tsx <-- The main entry. Contains structure for the sidebar when launched.
+│ appcard-modal.tsx <-- The main entry for the modal that appears when an app card is expanded.
+│ constants.ts <-- A collection of static variables used throughout the app.
+│ index.ts <-- Initializes app, and contains logic for opening the app from the sidebar and expanding an app card.
+│ modal.tsx <-- The main entry for the modal that appears when selecting a GitHub issue to import.
+├── app.html <-- The app itself. This is loaded on the board inside 'app.tsx'.
+├── appcard-modal.html <-- The app card modal itself. This is loaded on the board inside the 'appcard-modal.tsx'.
+├── index.html <-- The app entry point. This is the value you assign to 'sdkUri' in the app manifest file.
+└── modal.html <-- The modal itself. This is loaded on the board inside the 'modal.tsx'.
+```
+
+# 🫱🏻🫲🏽 Contributing
+
+If you want to contribute to this example, or any other Miro Open Source project, please review [Miro's contributing guide](https://github.com/miroapp/app-examples/blob/main/CONTRIBUTING.md).
+
+# 🪪 License
+
+[MIT License](https://github.com/miroapp/app-examples/blob/main/LICENSE).
diff --git a/examples/github-appcards/netlify/functions/project-cards.js b/examples/github-appcards/netlify/functions/project-cards.js
index 8abfdf9a4..f52c88088 100644
--- a/examples/github-appcards/netlify/functions/project-cards.js
+++ b/examples/github-appcards/netlify/functions/project-cards.js
@@ -5,6 +5,7 @@
**/
import { createClient } from "@supabase/supabase-js";
import fetch from "node-fetch";
+import username from "../../src/constants.ts";
const supabase = createClient(
process.env.VITE_DATABASE_URL,
@@ -24,7 +25,9 @@ exports.handler = async function (event) {
const gitHubProjectCard = body.gitHubProjectCard;
const gitHubProjectColumnId = gitHubProjectCard.column_id;
const gitHubIssueNumer = gitHubProjectCard.content_url
- .split("https: //api.github.com/repos/addisonschultz/github-cards/issues/")
+ .split(
+ "https:// api.github.com/repos/" + username + "/github-cards/issues/",
+ )
.pop();
const headers = {
diff --git a/examples/github-appcards/src/constants.ts b/examples/github-appcards/src/constants.ts
index 2980589ec..eb2cc598a 100644
--- a/examples/github-appcards/src/constants.ts
+++ b/examples/github-appcards/src/constants.ts
@@ -1,2 +1,2 @@
-export const username = "addisonschultz";
+export const username = "bishopwm";
export const repo = "github-cards";