{"id":15150413,"url":"https://github.com/condenast/fyi","last_synced_at":"2025-09-29T19:30:48.251Z","repository":{"id":33818217,"uuid":"111461467","full_name":"CondeNast/fyi","owner":"CondeNast","description":"Map \u0026 Explore your organization's System Architecture","archived":true,"fork":false,"pushed_at":"2024-07-08T13:43:25.000Z","size":5216,"stargazers_count":33,"open_issues_count":64,"forks_count":4,"subscribers_count":11,"default_branch":"master","last_synced_at":"2025-01-19T14:32:22.824Z","etag":null,"topics":["architecture","create-react-app","dashboard","pgsql","probot","vault"],"latest_commit_sha":null,"homepage":"","language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/CondeNast.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":"CODE_OF_CONDUCT.md","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}},"created_at":"2017-11-20T20:51:33.000Z","updated_at":"2024-08-11T19:37:28.000Z","dependencies_parsed_at":"2024-07-08T17:14:14.488Z","dependency_job_id":null,"html_url":"https://github.com/CondeNast/fyi","commit_stats":{"total_commits":12,"total_committers":4,"mean_commits":3.0,"dds":"0.33333333333333337","last_synced_commit":"7e71091d5a60c70d6555f71566c8d08cc7c0b7ec"},"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/CondeNast/fyi","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/CondeNast%2Ffyi","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/CondeNast%2Ffyi/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/CondeNast%2Ffyi/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/CondeNast%2Ffyi/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/CondeNast","download_url":"https://codeload.github.com/CondeNast/fyi/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/CondeNast%2Ffyi/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":277573577,"owners_count":25841472,"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","status":"online","status_checked_at":"2025-09-29T02:00:09.175Z","response_time":84,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"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":["architecture","create-react-app","dashboard","pgsql","probot","vault"],"created_at":"2024-09-26T14:03:51.777Z","updated_at":"2025-09-29T19:30:47.911Z","avatar_url":"https://github.com/CondeNast.png","language":"JavaScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"Archiving: Abandoned\n\n# 💁 FYI\n\nMap and Explore your organization's System Architecture\n\n[![license](https://img.shields.io/badge/license-Apache%202.0-blue.svg?style=flat)](LICENSE) [![](http://fyi.conde.io/badge/56)](http://fyi.conde.io/link/56) [![](http://fyi.conde.io/badge/162)](http://fyi.conde.io/link/162)\n\n_Proudly built by:_\n\n\u003ca href=\"https://technology.condenast.com\"\u003e\u003cimg src=\"https://user-images.githubusercontent.com/1215971/35070721-3f136cdc-fbac-11e7-81b4-e3aa5cc70a17.png\" title=\"Conde Nast Technology\" width=350/\u003e\u003c/a\u003e\n\n## 🤔 Introduction\n\nThe FYI application was built by the Architecture Team at Condé Nast to stay on top of their growing technology portfolio of systems (sites, apps, apis) distributed across hundreds of repositories in multiple GitHub organizations.\n\nThis application has two parts:\n\n  - a Github App to discover code repositories and request FYIs from developers\n  - a Web App to view interactive architecture diagrams with system dependencies and metrics\n\n![image](https://user-images.githubusercontent.com/1215971/47452222-b3b7c980-d797-11e8-9e5b-05e0fb29f1b5.png)\n\n### 🔨 Built Using\n\n  1. Probot (Github App Framework)\n  2. Create React App\n  3. Postgres SQL\n  4. Vault\n  5. Integrations with: Confluence, Slack, Datadog\n\n## 👨‍🔧 Install\n\n### 🔧 Step 1: Setting Up Services\nThe goal of this step is to setup the required services for the FYI application, and populate the files in the `config` directory.\n\n__A note about configurations__\n\nThe configuration is split across 2 files: `default.js` and `secrets.json`.\n`default.js` stores non-sensitive configuration settings and feature flags. Since we use `node-config`, these defaults can be overidden by the environment specific files: `staging.json` and `production.json`.\n`secrets.json` stores sensitive account information like app keys and api tokens. The application first tries to use `node-vault` to connect to a Vault instance and get the secrets, incase it fails to do so, it uses the `secrets.json`. The instructions below guide you towards creating your own `secrets.json` to start the application. If you later want to move it to a secure and shareable location, consider setting up Vault and moving the secrets there.\n\nLets get started...\n\n  1. Create a secrets file\n      1. Run `cp config/secrets.json.example config/secrets.json`\n  2. Create a web proxy url\n      1. Go to `https://smee.io/new`\n      2. In `secrets.json`, copy this smee channel url as the value for `webhook-proxy-url`\n  3. Create a Github Org\n      1. If you do not have a GiHub organization, go to `https://github.com/organizations/new` to start a new one\n      2. In `default.js`, add your organization name to the `github.subscribedOrgs` list \u0026 `github.adminOrg`\n  4. Create \u0026 Install a Github App\n      1. Go to `https://github.com/settings/apps/new` and create a new Github App\n      2. Set `Application Name` as per your choice, can be something like `archbot-test-\u003crandom number\u003e`\n      2. Set `Homepage URL` as per your choice, this will not be required for the application to work\n      2. Set `Webhook URL` to the webhook proxy url from above\n      3. Set `Webhook secret` as per your choice and then in `secrets.json` copy this as the value for `webhook-secret`\n      4. Update your Github App's permissions:\n          1. Read Only permission for: Repo Administration, Repo Metadata, Repo Webhooks, Commit Statuses, Org Members\n          2. Read and Write permission for: Checks, Repository Contents, Issues, Pull Requests,\n      5. Updates your Github Apps' event subscriptions:\n          1. Subscribe to events for: Repository, Issues, Issue Comments\n      6. For \"Where can this GitHub App be installed?\", choose \"Any Account\"\n      7. After the App is created, the ID will be listed in the About section. In `.env` file, copy this ID as the value for `APP_ID`\n      8. Generate a private key and download it. In order to use this key in our code, we will need to replace the carriage returns with `\\n`. Run this command on your key file: `sed -E ':a;N;$!ba;s/\\r{0,1}\\n/\\\\n/g' \u003cyour-key-file\u003e.pem`. In `secrets.json` copy the output of the `sed` command as the value for `github-private-key`\n      9. Head over to `https://github.com/settings/apps/\u003cyour github app name\u003e/installations` and install this application to your organization\n  5. Create a FYI Admin GitHub repository\n      1. Go to `https://github.com/organizations/\u003cyour github org name\u003e/repositories/new` and create a new repository called `fyi-admin`\n  6. Create a Confluence Account, Space and Page\n      1. If you do not have a Confluence account, sign up for a free account here: https://www.atlassian.com/software/confluence/try\n      2. After account creation, you will be prompted to create a space (you can name it Arch)\n      3. After space creation, you will be prompted to create a page (you can name it FYIs). On this page, using \"Insert More Content\" dropdown, select \"Other Macros\" and add \"Children Display\".\n      4. In `default.js`, add your Confluence Site name (only the part before .attlassian.net) as `hostname`, your Confluence Space name as `spaceKey`, and your Confluence Page id as `fyiPageId`.\n      5. Now create a Confluence API token here: https://id.atlassian.com/manage/api-tokens\n      6. In `secrets.json`, add you Confluence account email as `confluence-username` and API token as `confluence-access-token`\n  7. Configure Slack channel (optional)\n      1. If you want to disable slack, update `default.js` for `slack.enabled` to be `false`\n      2. Install \"Incoming Webhooks\" for your Slack instance\n      3. Add a configuration for new incoming webhook for posting to your Slack channel\n      4. In `secrets.json`, copy the Slack webhook url as the value for `slack-webhook-url`\n      5. In `default.js`, set the channel name as value for `slack.channel`\n  8. Configure Datadog events (optional)\n      1. This integration is a WIP. For now, disable this integration, update `default.js` for `datadog.enabled` to be `false`\n\n### 🏃 Step 2: Running With Docker (recommended)\n\n  0. Pre-requisites: Docker and Docker Compose\n  1. Build Docker Image: `docker build -t fyi-image .`\n  2. Run Application: `docker-compose up`\n  3. Open your browser and go to `http://localhost:3001`\n\n### 🚶 Running Without Docker\n\n  0. Pre-requisites: Node v9+, Postgres SQL v10+\n  1. Create database called `easy-fyi-development`\n  1. `npm i`\n  2. `npm run install:client`\n  3. `npm start`\n  4. Open your browser and go to `http://localhost:3001`\n\n## 🚀 Usage\n\n### 🆕 Creating a new FYI\n\nThere are 2 ways to create a new FYI:\n\n  1. On the FYI homepage, click on the `New` button, add the FYI name and click `Submit`. This will create a FYI page for you to add dependencies, repositories and tags.\n  2. If a new repository is created or identified, then the `Request FYI` command by Admins will create a new FYI.\n\n### 🔀 Adding a Dependency to FYI\n\nA dependency for a FYI can only be from a set of other existing FYIs.\nA new dependency can be added through that FYI's detail page in the toolbar.\n\n### ℹ️ Adding a New Repository to FYI\n\nWhen a new repository is created in the GitHub organization, the bot automatically detects it and sends a notification to the Admins who can choose to `Request a new FYI` or `Request to link to FYI` from the repository owner directly through Github issues.\n\n### 🈁 Adding a Existing Repository to FYI\n\nA request to add an existing repository can be submitted through the FYI's detail page in the toolbar. This triggers a notification to the Admins who can choose to pass the request to the repository owner or skip it.\n\n### ⏹ Adding a Tag to FYI\n\nA new tag can be added through the FYI's detail page in the toolbar.\n\n## 🙏 Thanks\n\nWe would like to thank the [Probot team and community](https://probot.github.io/) for giving us a solid foundation of code and inspiration on top of which we could build this application.\n\n## 👨‍🏭 Contributors\n\nSee the list of [contributors](https://github.com/CondeNast/fyi/contributors) who participated in writing this tool.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcondenast%2Ffyi","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fcondenast%2Ffyi","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcondenast%2Ffyi/lists"}