GithubHelp home page GithubHelp logo

aoepeople / aoe_technology_radar Goto Github PK

View Code? Open in Web Editor NEW
212.0 24.0 104.0 7.55 MB

Create your own Technology Radar: A static site generator for a full featured Technology Radar. Features: Quadrants, Rings, Dashboard, Radar Visualization, Item History, Search etc..

Home Page: http://www.aoe.com/techradar

License: Other

JavaScript 7.05% TypeScript 72.41% CSS 20.54%
aoe tech-radar css html react technology-radar hacktoberfest

aoe_technology_radar's Introduction

AOE Technology Radar

A static site generator for AOE Technology Radar

Screenshot of the AOE Technology Radar

Looking for the AOE Tech Radar content?

✨ Version 4.0.0

Version 4.0.0 is a complete rewrite of the AOE Technology Radar. It is now based on Next.js to provide enhanced static site generation. The visualization has been rewritten without the need for the D3 dependency. New features include a fuzzy search based on Fuse.js, non-overlapping blips on the radar, and a reworked tag filter on the homepage.

To migrate from the old version please migrate your package.json's scripts and create a new config.json based on the documentation below. You can find a reference implementation in our repo. The old version is still available in the v3 branch.

Version 4.0.0 also removes the .html extension from the URLs. If you want to support the old URLs, we recommend to add a redirect rule. For nginx, you can use the following rule:

rewrite ^/techradar/(.+)\.html$ /techradar/$1/ permanent;

Create your own radar

The generator is free to use under Open Source License - in fact there are already some other Radars published based on our Radar and there are also Contributions back. However, it would be nice to mention in radar that the generator is based on this repository.

Step 1: Create a new project

Ensure node.js ist installed and create a new project by creating a new folder with a package.json file like the following and adapt to your needs:

{
  "name": "aoe-techradar",
  "version": "1.0.0",
  "license": "MIT",
  "scripts": {
    "build": "techradar build",
    "serve": "techradar serve"
  },
  "dependencies": {
    "aoe_technology_radar": "^4"
  }
}

Run npm install to install the dependencies and run npm run build to create the initial radar. This will also create a basic bootstrap of all required files, including the config.json and the about.md if they do not exist yet.

Step 2: Change logo and the favicon

Place your logo.svg and favicon.ico in the public folder next to the package.json. The ideal logo is 150px x 60px. For reference have a look at public/logo.svg.

If you want to use a file other than an SVG, copy it to the public folder and set the name of the file as logoFile inside the config.json. e.g. "logoFile": "acme-logo.png"

Step 3: Configure the radar

Open the config.json file and configure the radar to your needs.

Attribute Description
basePath Set if hosting under a sub-path, otherwise set it to /. Default is /techradar
baseUrl Set to the full URL, where the radar will be hosted. Will be used for sitemap.xml. https://www.aoe.com/techradar
logoFile (optional) Filepath in public folder. Default is logo.svg
toggles (optional) Modify the behaviour and contents of the radar. See config below.
sections (optional) Modify the order of sections (radar, tags, list)
colors A map of colors for the radar. Can be any valid CSS color value
quadrants Config of the 4 quadrants of the radar. See config below.
rings Config of the rings of the radar. See config below.
flags Config of the flags of the radar. See config below
chart If you hava a lot of items, you can increase the size to scale down the radar
social Social links in the footer. See config below
imprint URL to the legal information
labels Configure the labels to change the texts and labels of the radar
tags (optional) Use to render only items, which contain at least one of the specified tags. e.g ["frontend", "backend"]
editUrl (optional) If set, an edit button will be shown next to the revision.
You can use placeholders for {id} and {release}

config.toggles

Attribute Description
showChart Render the radar visualization on the homepage?
showTagFilter Render the tag filter below the radar?
showQuadrantList Render the items below the radar?
showEmptyRings If set to true it will render empty rings in the list

config.sections

An array with of radar, tags, list in order you want them to appear on the page.

config.quadrants

Attribute Description
id Used as reference in the radar markdown files and URLs
title Title of the quadrant
description Will be shown on startpage and on the quadrants detail page
color Color of the quadrant arcs and blips

config.rings

Attribute Description
id Used as reference in the radar markdown files
title Title of the ring. Will be used in the badge
description
color Color of the ring's badge
radius Size of the ring. Value between 0 and 1, where 0.5 would be a ring 50% wide
strokeWidth Size of the ring's border

config.flags.[new|changed|default]

Attribute Description
color Color of the flag
title Long label of the flag
titleShort Short label (single letter) shown in lists
description Label in the radar legend

config.social.[]

Attribute Description
href URL to the website
icon One of facebook, github, gitlab, instagram, linkedin, x, xing, youtube

Step 4: Add a help page with explanations

Edit the about.md file next to the package.json file. The contents will be shown on the /help-and-about-tech-radar page. Optionally you can change the title of the menu by setting labels.pageAbout in your config.json.

Step 5: Create the radar items

Remove or edit existing items in the radar folder. For a new release, create a folder of the release date (YYYY-MM-DD) under ./radar. e.g. ./radar/2024-03-01.

The items are written in Markdown format (.md)

Each file has a meta header where the attributes of the item are listed:

---
title: "React"
ring: adopt
quadrant: languages-and-frameworks
tags: [frontend, coding]
---

Text goes here. You can use **markdown** here.

Following front-matter attributes are possible:

  • title: Name of the Item
  • quadrant: Quadrant. One of the configured quadrants in config.quadrants
  • ring: Ring section in radar. One of the configured rings in config.rings
  • tags: Optional tags for filtering.
  • featured: (optional, default "true") If you set this to false, the item will not be visible in the radar quadrants but still be available in the overview.

The name of the .md file acts as item identifier and may overwrite items with the same name from older releases.

If an item is overwritten in a new release, the attributes from the new item are merged with the old ones, and a new history entry is created for that item.

You can integrate images in your markdown. Put the image files in the public/images folder and reference them

![nice image](/images/optional-content-image.png)

Step 6: Build your radar

Your final file and folder structure should look like this:

├── about.md
├── config.json
├── package.json
├── public/
│ ├── images/
│ │ └── optional-content-image.png
│ ├── favicon.ico
│ └── logo.svg
└── radar/
  ├── 2023-12-31/
  │ ├── demo-item-1.md
  │ └── demo-item-2.md
  └── 2024-03-05/
    ├── demo-item-1.md
    └── demo-item-3.md

Run npm run build to build the radar and upload the files of the ./build folder to your server.

You can view a development version of the radar by running npm run serve and open the radar in your browser at http://localhost:3000/techradar or the path you specified via basePath.

Advanced styling with custom.css

If you need to customize the radar's styles, you can add custom CSS rules to the custom.css file.

Be aware that this might break with future versions of the radar as we use css-modules in the components which generates dynamic, hashed class names and the layout structure might change.

Therefore, it's advised the [attribute^=value] selector that matches elements whose attribute value begins with a specified value. As an example, if you want to always show the subline in the header use the following rule:

[class^="Logo_subline"] {
  display: block;
  opacity: 1;
}

If you want to include assets like images or fonts, use ../../public/ as the base path. Adding a background image to the page could be archived like this:

body {
  background: url("../../public/background.png");
}

Changing the font-family of the headlines:

h1,
h2,
h3 {
  font-family: "Times New Roman", Times, Baskerville, Georgia, serif;
}

Changes to the css file will not be reflected in the development server. You need to run npm run serve or npm run build to see the changes.

Development

If you want to change core functionality of the radar, you can clone this repository and put your radar's markdown-files, config.json and about.md in the data folder. Run npm run build:data to parse the markdown files and create a data.json and then run npm run dev to start the development server, which will be available at http://localhost:3000/techradar or the path you specified via basePath.

aoe_technology_radar's People

Contributors

bastianccm avatar bernhardbehrendt avatar bmsuseluda avatar carstenlenz avatar christianholzschuh avatar d-koppenhagen avatar danielpoe avatar danielruf avatar danielvonwi avatar davidmcgregor avatar dependabot[bot] avatar derkoe avatar eddiewhi avatar fbrandel avatar greenkeeper[bot] avatar jar0s avatar jdcarlston avatar mathiasschopmans avatar onikiienko avatar philipfeldmann avatar raedwards avatar renovate-bot avatar renovate[bot] avatar resah avatar sandritter avatar srose avatar srotsch avatar tilmanginzel avatar tomasnorre avatar tomraithel avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

aoe_technology_radar's Issues

Add Dockerfile

Hi,

It would be very nice if you could include a Dockerfile to build container image of the great AOE radar.

Sanitize descriotions on HelpPage

It should be possible to have more flexible desciptions at the help page containing links, etc.
Therefore the values in messages.json should be sanitized, so that it's allowed to configure HTML inside those messages.

Putting all Techradar data in every rendered HTML will eat up disk space with big radars

We have a demo installation with about 200 items in the techradar. Putting every item and item description in every rendered html file of the techradar will easily eat up disk space. Currently this is done for initialising the Redux State Container in https://github.com/AOEpeople/aoe_technology_radar/blob/master/js/server.js#L51.

This is a concern with static page hosts like Github Pages or Gitlab Pages. The latter fails when pages exceed 100 MB.

We had a case where every rendered HTML file was about 500KB. With 200 items in the techradar the 100 MB max size was easily exceeded.

v3 is not working anymore, Cannot find module './_baseGetTag'

Hello,

I have updated my code to use the latest version to be able to customize stuff (which is great by the way, thanks).
However, this is not working anymore. To be sure, I have tested in a new context.

Here is the error:

yarn aoe_technology_radar-buildRadar  

yarn run v1.22.10
warning package.json: No license field
$ /home/yolo/tmp/techradar/node_modules/.bin/aoe_technology_radar-buildRadar
warning ../../package.json: No license field
$ react-scripts build
node:internal/modules/cjs/loader:927
  throw err;
  ^

Error: Cannot find module './_baseGetTag'
Require stack:
- /home/yolo/tmp/techradar/node_modules/lodash/isPlainObject.js
- /home/yolo/tmp/techradar/node_modules/pretty-error/lib/PrettyError.js
- /home/yolo/tmp/techradar/node_modules/html-webpack-plugin/lib/errors.js
- /home/yolo/tmp/techradar/node_modules/html-webpack-plugin/index.js
- /home/yolo/tmp/techradar/node_modules/react-scripts/config/webpack.config.js
- /home/yolo/tmp/techradar/node_modules/react-scripts/scripts/build.js
    at Function.Module._resolveFilename (node:internal/modules/cjs/loader:924:15)
    at Function.Module._load (node:internal/modules/cjs/loader:769:27)
    at Module.require (node:internal/modules/cjs/loader:996:19)
    at require (node:internal/modules/cjs/helpers:92:18)
    at Object.<anonymous> (/home/yolo/tmp/techradar/node_modules/lodash/isPlainObject.js:1:18)
    at Module._compile (node:internal/modules/cjs/loader:1092:14)
    at Object.Module._extensions..js (node:internal/modules/cjs/loader:1121:10)
    at Module.load (node:internal/modules/cjs/loader:972:32)
    at Function.Module._load (node:internal/modules/cjs/loader:813:14)
    at Module.require (node:internal/modules/cjs/loader:996:19) {
  code: 'MODULE_NOT_FOUND',
  requireStack: [
    '/home/yolo/tmp/techradar/node_modules/lodash/isPlainObject.js',
    '/home/yolo/tmp/techradar/node_modules/pretty-error/lib/PrettyError.js',
    '/home/yolo/tmp/techradar/node_modules/html-webpack-plugin/lib/errors.js',
    '/home/yolo/tmp/techradar/node_modules/html-webpack-plugin/index.js',
    '/home/yolo/tmp/techradar/node_modules/react-scripts/config/webpack.config.js',
    '/home/yolo/tmp/techradar/node_modules/react-scripts/scripts/build.js'
  ]
}
error Command failed with exit code 1.
info Visit https://yarnpkg.com/en/docs/cli/run for documentation about this command.
undefined
error Command failed with exit code 1.
info Visit https://yarnpkg.com/en/docs/cli/run for documentation about this command.

And here is the process I have used to reproduce it:

mkdir -p techradar/radar/2021-07-01
vi techradar/radar/2021-07-01/test.md                  (and add the content of the README.md sample then save)
cd techradar
yarn add https://github.com/aoepeople/aoe_technology_radar.git
yarn aoe_technology_radar-generateJson
yarn aoe_technology_radar-buildRadar

Using the two last commands in reverse order, like described in the README, will fail.

Is there something missing in the dependencies?

Thanks!

Config: improve default config values

Unknown config values with the current main branch may fail users, as configuration options are undefined.
We need a better way to handle default config options I think?

Version 3.1.1 is not building techradar

Hello,

I have upgraded my radar with the latest release, and now the techradar is not building, with 2 separate issues related to the 2 new features.

I have updated the dependencies with :

yarn upgrade && yarn install

Then I build the radar with the following commands.

  • First issue is about html-sanitize when running yarn aoe_technology_radar-buildRadar
yarn aoe_technology_radar-buildRadar
yarn run v1.22.15
warning package.json: No license field
$ /workspaces/techradar/node_modules/.bin/aoe_technology_radar-buildRadar
warning ../../package.json: No license field
$ react-scripts build
Creating an optimized production build...
Failed to compile.

/workspaces/techradar/node_modules/aoe_technology_radar/src/components/PageHelp/PageHelp.tsx
TypeScript error in /workspaces/techradar/node_modules/aoe_technology_radar/src/components/PageHelp/PageHelp.tsx(2,26):
Could not find a declaration file for module 'sanitize-html'. '/workspaces/techradar/node_modules/sanitize-html/index.js' implicitly has an 'any' type.
  Try `npm i --save-dev @types/sanitize-html` if it exists or add a new declaration (.d.ts) file containing `declare module 'sanitize-html';`  TS7016

    1 | import React from "react";
  > 2 | import sanitizeHtml from 'sanitize-html';
      |                          ^
    3 | import HeroHeadline from "../HeroHeadline/HeroHeadline";
    4 | import Fadeable from "../Fadeable/Fadeable";
    5 | import SetTitle from "../SetTitle";


error Command failed with exit code 1.
info Visit https://yarnpkg.com/en/docs/cli/run for documentation about this command.
undefined
error Command failed with exit code 1.
info Visit https://yarnpkg.com/en/docs/cli/run for documentation about this command.
  • Second issue appears with yarn aoe_technology_radar-createStaticFiles:
yarn aoe_technology_radar-createStaticFiles
yarn run v1.22.15
warning package.json: No license field
$ /workspaces/techradar/node_modules/.bin/aoe_technology_radar-createStaticFiles
starting static
/workspaces/techradar/node_modules/aoe_technology_radar/dist_scripts/scripts/createStaticFiles.js:49
    throw err;
    ^

Error: ENOENT: no such file or directory, open '/workspaces/techradar/build/config.json'
    at Object.openSync (node:fs:585:3)
    at Object.readFileSync (node:fs:453:35)
    at checkAttributes (/workspaces/techradar/node_modules/aoe_technology_radar/dist_scripts/scripts/generateJson/radar.js:112:24)
    at /workspaces/techradar/node_modules/aoe_technology_radar/dist_scripts/scripts/generateJson/radar.js:137:97
    at step (/workspaces/techradar/node_modules/aoe_technology_radar/dist_scripts/scripts/generateJson/radar.js:63:23)
    at Object.next (/workspaces/techradar/node_modules/aoe_technology_radar/dist_scripts/scripts/generateJson/radar.js:44:53)
    at /workspaces/techradar/node_modules/aoe_technology_radar/dist_scripts/scripts/generateJson/radar.js:38:71
    at new Promise (<anonymous>)
    at __awaiter (/workspaces/techradar/node_modules/aoe_technology_radar/dist_scripts/scripts/generateJson/radar.js:34:12)
    at /workspaces/techradar/node_modules/aoe_technology_radar/dist_scripts/scripts/generateJson/radar.js:127:81 {
  errno: -2,
  syscall: 'open',
  code: 'ENOENT',
  path: '/workspaces/techradar/build/config.json'
}
error Command failed with exit code 1.
info Visit https://yarnpkg.com/en/docs/cli/run for documentation about this command.

Regards.

License information

We love your tech radar and it inspired us to create our own tech radar based on your work.
Therefore we created a fork. You can see the result here. The running version is here .
We made lot of changes and adapted the content for our use case.
We want to publish the Tech Radar in our company. And we plan to leave it accessable by everybody.

I just wanted to add license information to our GitHub fork and realized that I can't find license infos on your repo.
We want to provide it under the Apache 2.0 license like we did here?
How did you want to offer your work and can you add license information?
Do you see any problems that we publish our Haufe Tech-Radar?

Release v3.1.0

With all the nice contributions incoming we should release again

Parameterized baseUrl location

I'm having some troubles getting this to deploy and behave correctly using Gitlab pages to host.

For example, due to the repo structure within my organization's Gitlab group, the base URL where the site will be deployed looks like:

https://company-engineering.gitlab.io/teams/engineering/tools/tech-radar

It looks like the fix for your implementation was to hard code 'techradar' into a number of the file paths, however if I were to replace that with the full string represented in my URL above, it doesn't load locally properly.

It would be ideal to pass in a base URL in the config that would inform the file structure/URL path. Examples of this can be found in this repo: https://gitlab.com/pages

Limit the number of items on quadrant overview page

Hi,

It would be nice to have the possibillity to have a configurable number of items shown on the quadrants overview.
Like if we have 15 items on Languages & Frameworks and Adopt but have configured to show max 10 items it could list those and then a link to zoom in on the quadrant to show all, e.g.

Item 1
Item 2
Item 3
Item 4
Item 5
Item 6
Item 7
Item 8
Item 9
Item 10
...show remaining 5 items (a link to quadrant/zoom in page)

Add a graphical radar

Hello,

Is there any possibility to add a graphical radar in the index page?
For now, I'm working around it by integrating the zalando radar, and generating the radar data from the aoe markdown with a python script, but...

  • it's not perfectly integrated, going back to index from aoe pages won't go back to the graphical radar until the page is refreshed
  • it's not visually coherent

So having it directly with the AOE techradar would be great!

Thanks, regards.

Item History

I cannot see anything in the UI how you show history.
In your readme.md you wrote:
"Show item history on details (relevant with 2nd release)"

Does that mean that till now there is no UI support for history at all in the solution?

It would be great if the history feature would be implemented.

Add possibility to have MD (or HTML) in footer and help page

Hello,

I managed to use the techradar, and all is fine, except the fact that I can't have link in footer notes and help page.
It would be great to have these parts managed as markdown, to be able to add links, images, and so on.

I was not able to determine how to do it and propose a PR... :(

Allow to configure keys/values for quadrants and rings

Hi, currently the configuration for rings and quadrants is fixed and cannot be customized easily.
This settings should be configurable as it will may change (either here or within a customized project/fork as PR https://github.com/AOEpeople/aoe_technology_radar/pull/93/files will show).

My suggestion would be to allow placing a JSON-config-file inside the public that allows to define customized values to be used (similar to messages.json).

E.g.:

/public/config.json

{
  "quadrants": {
    "infrastructure-and-tools": "Infrastructure & Tools",
    "languages-and-frameworks": "Languages & Frameworks",
    "foo-bar": "Foo & Bar",
    "baz": "Another Category"
  },
  "rings": ["all", "adopt", "trial", "assess", "hold", "foo", "bar"]
}

Question - How would I modify formatting in the latest release?

I've tried replicating both repos (the tech radar contents, and the aoe_technology_radar repos) into my personal Gitlab repos, and referencing the aoe_technology_radar from the techradar repo, but it fails to install yarn packages if I point to my repo path. I'm a bit of a Yarn newbie, but if it requires using the publically published yarn package, how would I go about updating fonts/logos since those are set up in the aoe_technology_radar repo?

Support for removed items

Is there support for deleted items?

We sometimes remove items from our radar to keep them clean. For instance, if something was moved from "adopt" to "hold" we'd like to remove it from our radar after a while or when we drop some service from our infrastructure. We don't want to remove it from all versions because we'd like to keep it for future references and not change released radar versions.

Thank you

no "real" radar

I miss a cirular representation like the other solutions have them.

Build issues

Hi,

I am not able to build the AOE Tech Radar v2.0.
Need to do some changes to fonts, colors etc so therefore a have cloned the repo

$ git clone https://github.com/AOEpeople/aoe_technology_radar.git
$ cd aoe_technology_radar
# download all dependencies
$ yarn 
# build
$ yarn build 

In package.json it only runs tsc but in v1.99 it had a lot of commands that was executed.

How can I build a working tech radar?

How to always show all rings?

Hi,

First, thanks for great tech radar implementation.
I would like to always show rings even if there is no items to it. Like the screenshot below

image

Do you have any ideas on how that could be solved?

Page content jumps on page transitions

When navigating from one page WITHOUT scrollbar, to another page WITH scrollbar (and vise versa), the page content "jumps" by the width of the scrollbar. This destroys the smooth transitions between the page changes a little bit.

Additional tags for filtering

Hi,

Thanks for great solution for TechRadar!

One improvement area that we can see is that the radar can be very large and difficult to read.
A suggestion would be to have additional tags and filtering.
Some components are valid and applicable for all but some are only of interest in a certain area; or if we call them "development track". It could be from tech-stack "java" or ".net" or domains "DataWarehouse", "Application" or "Infrastructure"

Two examples:

---
title:      "Apache Hadoop"
ring:       appointed
quadrant:   platforms-and-services
dev_track:  data-warehouse

---

or

---
title:      "Spring Framework"
ring:       appointed
quadrant:   languages-and-frameworks
dev_track:  java

---

And then a possibility to filter on these tags in the UI.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.