summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--.gitignore8
-rw-r--r--.prettierrc11
-rw-r--r--app/assets/de.html310
-rw-r--r--app/assets/index.html310
-rw-r--r--app/assets/key.ssh1
-rw-r--r--app/print.styl25
-rw-r--r--app/stylesheets/print/header.styl21
-rw-r--r--app/stylesheets/print/projects.styl7
-rw-r--r--app/stylesheets/print/skills.styl17
-rw-r--r--app/stylesheets/web/education.styl58
-rw-r--r--app/stylesheets/web/header.styl45
-rw-r--r--app/stylesheets/web/projects.styl21
-rw-r--r--app/stylesheets/web/skills.styl31
-rw-r--r--app/stylesheets/web/summary.styl8
-rw-r--r--app/stylesheets/web/work.styl81
-rw-r--r--app/web.styl65
-rw-r--r--archetypes/default.md6
-rw-r--r--assets/.keep (renamed from app/stylesheets/print/summary.styl)0
-rw-r--r--assets/scss/print.scss3
-rw-r--r--assets/scss/print/_base.scss18
-rw-r--r--assets/scss/print/_education.scss (renamed from app/stylesheets/print/education.styl)8
-rw-r--r--assets/scss/print/_header.scss21
-rw-r--r--assets/scss/print/_projects.scss7
-rw-r--r--assets/scss/print/_skills.scss17
-rw-r--r--assets/scss/print/_summary.scss0
-rw-r--r--assets/scss/print/_work.scss (renamed from app/stylesheets/print/work.styl)6
-rw-r--r--assets/scss/web.scss3
-rw-r--r--assets/scss/web/_base.scss56
-rw-r--r--assets/scss/web/_education.scss58
-rw-r--r--assets/scss/web/_header.scss45
-rw-r--r--assets/scss/web/_projects.scss21
-rw-r--r--assets/scss/web/_skills.scss31
-rw-r--r--assets/scss/web/_summary.scss8
-rw-r--r--assets/scss/web/_work.scss81
-rw-r--r--brunch-config.js17
-rw-r--r--content/.keep0
-rw-r--r--data/.keep0
-rw-r--r--data/home/index.yaml48
-rw-r--r--data/home/projects.yaml11
-rw-r--r--data/home/work.yaml81
-rw-r--r--data/home/writing.yaml29
-rw-r--r--hugo.yaml4
-rw-r--r--layouts/.keep0
-rw-r--r--layouts/home.html24
-rw-r--r--layouts/partials/head/metadata.html15
-rw-r--r--layouts/partials/home/education.html10
-rw-r--r--layouts/partials/home/header.html15
-rw-r--r--layouts/partials/home/projects.html11
-rw-r--r--layouts/partials/home/skills.html11
-rw-r--r--layouts/partials/home/summary.html6
-rw-r--r--layouts/partials/home/work.html20
-rw-r--r--package.json22
-rw-r--r--static/.keep0
-rw-r--r--static/gpg.key (renamed from app/assets/key.asc)18
-rw-r--r--static/ico/android-chrome-192x192.png (renamed from app/assets/android-chrome-192x192.png)bin4201 -> 4201 bytes
-rw-r--r--static/ico/apple-touch-icon.png (renamed from app/assets/apple-touch-icon.png)bin3392 -> 3392 bytes
-rw-r--r--static/ico/browserconfig.xml (renamed from app/assets/browserconfig.xml)0
-rw-r--r--static/ico/favicon-16x16.png (renamed from app/assets/favicon-16x16.png)bin596 -> 596 bytes
-rw-r--r--static/ico/favicon-32x32.png (renamed from app/assets/favicon-32x32.png)bin958 -> 958 bytes
-rw-r--r--static/ico/favicon.ico (renamed from app/assets/favicon.ico)bin1150 -> 1150 bytes
-rw-r--r--static/ico/mstile-150x150.png (renamed from app/assets/mstile-150x150.png)bin3853 -> 3853 bytes
-rw-r--r--static/ico/safari-pinned-tab.svg (renamed from app/assets/safari-pinned-tab.svg)0
-rw-r--r--static/ico/site.webmanifest (renamed from app/assets/site.webmanifest)0
-rw-r--r--themes/.keep0
-rw-r--r--yarn.lock1296
65 files changed, 687 insertions, 2359 deletions
diff --git a/.gitignore b/.gitignore
index 103ff33..23e4535 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,8 +1,4 @@
-.DS_Store
+.hugo_build.lock
-npm-debug.log*
-yarn-debug.log*
-yarn-error.log*
-
-node_modules/
+resources/
public/
diff --git a/.prettierrc b/.prettierrc
deleted file mode 100644
index 95f2dae..0000000
--- a/.prettierrc
+++ /dev/null
@@ -1,11 +0,0 @@
-{
- "printWidth": 120,
- "tabWidth": 2,
- "useTabs": false,
- "semi": true,
- "singleQuote": false,
- "quoteProps": "as-needed",
- "trailingComma": "all",
- "bracketSpacing": true,
- "endOfLine": "lf"
-}
diff --git a/app/assets/de.html b/app/assets/de.html
deleted file mode 100644
index 37f4b9a..0000000
--- a/app/assets/de.html
+++ /dev/null
@@ -1,310 +0,0 @@
-<!DOCTYPE html>
-<html lang="de">
- <head>
- <meta charset="utf-8" />
- <title>A14M</title>
- <link href="/web.css" rel="stylesheet" media="all" />
- <link href="/print.css" rel="stylesheet" media="print" />
- <link rel="shortcut icon" href="/favicon.ico" />
- <link rel="apple-touch-icon" sizes="180x180" href="/apple-touch-icon.png" />
- <link rel="icon" type="image/png" sizes="32x32" href="/favicon-32x32.png" />
- <link rel="icon" type="image/png" sizes="16x16" href="/favicon-16x16.png" />
- <link rel="manifest" href="/site.webmanifest" />
- <link rel="mask-icon" href="/safari-pinned-tab.svg" color="#000" />
- <meta name="msapplication-TileColor" content="#da532c" />
- <meta name="theme-color" content="#ffffff" />
-
- <meta name="author" content="Ahmed AbdelHalim" />
- <meta name="description" content="A14M · Platform Engineer/DevOps" />
- <meta name="keywords" content="DevOps, go, docker, ansible, python, bash, CI, CD, TDD, BDD, AWS, terraform, GCP, k8s, kubernetes, grafana, prometheus, loki, ELK" />
- <meta name="viewport" content="width=device-width, initial-scale=1.0" />
- <meta name="color-scheme" content="dark light" />
- </head>
-
- <body>
- <main>
- <header class="header">
- <a class="header__language" lang="en" href="/">[EN]</a>
- <h1 class="header__name">Ahmed AbdelHalim</h1>
- <em class="header__job-title">Plattform-Ingenieur &centerdot; DevOps</em>
- <address class="header__contact-info">
- <div class="header__location">Berlin, Deutschland</div>
- <div class="header__tel"><a href="tel:+491770126386">+49 177 912 6386</a></div>
- <div class="header__email"><a href="mailto:[email protected]">[email protected]</a></div>
- <div class="header__website"><a href="https://a14m.me">website</a></div>
- <div class="header__srht"><a href="https://git.sr.ht/~a14m">sr.ht</a></div>
- <div class="header__github"><a href="https://github.com/a14m">Github</a></div>
- <div class="header__stackoverflow">
- <a href="https://stackoverflow.com/users/1769515/a14m">StackOverflow</a>
- </div>
- <div class="header__linkedin"><a href="https://www.linkedin.com/in/a14m">LinkedIn</a></div>
- <div class="header__pgp"><a href="/key.asc">PGP</a></div>
- </address>
- </header>
-
- <article class="summary">
- <h2 class="summary__header section-header">Summary</h2>
- <p class="summary__content">
- Plattform-Ingenieur mit
- 10+ Jahre Erfahrung in der Software-Entwicklung (Backend/API-fokussiert),
- 5+ Jahre Erfahrung in Infrastruktur-Automatisierung und DevOps,
- Hobby-Sicherheitsanalytiker und -tester.
- Ein begeisterter Fan von Automatisierung, Nachhaltigkeit, Design Patterns und sauberem Code.
- Immer daran interessiert, eine bessere Problemlösungsmethode für anspruchsvolle Aufgaben zu finden,
- und sinnvolle neue Technologien und Tools zu erlernen (wenn die Notwendigkeit besteht).
- </p>
- </article>
- <article class="skills">
- <h2 class="skills__header section-header">Kenntnisse</h2>
- <dl class="skills__content">
- <dt class="skills__title">DevOps</dt>
- <dd class="skills__items">Kubernetes, Terraform, Docker, Ansible, CloudFoundry, Helm, Fastly, Vault,
- Concourse, Artifactory, ...
- </dd>
-
- <dt class="skills__title">Telemetrie</dt>
- <dd class="skills__items">Grafana, Prometheus, Loki, <abbr title="Elasticsearch Logstash Kibana">ELK</abbr>,
- Sentry, Tempo.
- </dd>
-
- <dt class="skills__title">Kodierung</dt>
- <dd class="skills__items">Go, Ruby, Python, Bash, Rust.</dd>
-
- <dt class="skills__title">Paradigmen</dt>
- <dd class="skills__items">
- Design Patterns, Test Driven Development (<abbr>TDD</abbr>), Behavior Driven Development (<abbr>BDD</abbr>),
- Continuous Integration and Delivery (<abbr>CI/CD</abbr>), Infrastructure as Code (<abbr>IaC</abbr>),
- Configuration as Code, RESTful APIs, Micro-Services.
- </dd>
-
- <dt class="skills__title">Tools</dt>
- <dd class="skills__items">
- vim, git, tmux, ssh, bash, kubectl, kubevela, ansible, helmfile, vagrant, docker, certbot, dig, bosh, vault,
- nc, nmap, curl, ffuf, gobuster, sqlmap, xxd, searchsploit, meta-sploit, commix, gdb, ltrace, ...
- </dd>
-
- <dt class="skills__title">Plattformen</dt>
- <dd class="skills__items">
- Amazon Web Services (<abbr>AWS</abbr>), DigitalOcean, Heroku, Google Cloud Platform (<abbr>GCP</abbr>),
- Linux.
- </dd>
-
- <dt class="skills__title">Sprachen</dt>
- <dd class="skills__items">Englisch (C2), Deutsch (B1), Arabisch (Muttersprache).</dd>
- </dl>
- </article>
-
- <article class="work">
- <h2 class="work__header section-header">Berufserfahrungen</h2>
- <article class="work__experience">
- <div class="job-position">
- <h2 class="job-position__company">
- <a href="https://group.springernature.com/gp/group">Springer Nature AG & Co. KGaA</a>
- </h2>
- <em class="job-position__title">Platform Engineer</em>
- <em class="job-position__duration">Feb. 2022 - Aug. 2022</em>
- <em class="job-position__location">Berlin, Germany</em>
- </div>
- <p class="note">Arbeiten als Teil des <b>Engineering Enablement</b>-Teams, das Infrastruktur bereitstellt,
- interne Tools, Dokumente, CloudFoundry-Plattform und Kubernetes-Cluster,
- um die Entwicklungsteams bei ihren täglichen Aufgaben zu unterstützen.</p>
- <ul class="tasks">
- <li>Arbeitete an interner <a href="https://github.com/springernature/halfpipe">(Halfpipe)</a>
- Tools zum Erstellen von CI/CD-Pipelines auf Github-Aktionen und Concourse.</li>
- <li>Implementierte wiederverwendbare GitHub Actions-Workflows für die Bereitstellung in CloudFoundry, Kubernetes und
- Docker-Registrierungen.</li>
- <li>Implementierte Tools zum Anzeigen und Melden des Kubernetes-Bereitstellungsstatus (von CI/CD) an die jeweiligen Teams,
- und benachrichtigen Sie sie bei Fehlern.
- </li>
- <li> Implementierter Alert-Routing-Service zur Integration mit Prometheus
- <a href="https://prometheus.io/docs/alerting/latest/alertmanager/">Alert-Manager</a>.
- Und sendet Benachrichtigungen an verschiedene Teams/Projekte und vorkonfigurierte Slack-Kanäle oder E-Mails.</li>
- <li>Gepflegte Teamdokumente, die von anderen Entwicklungsteams verwendet werden, um sie in interne Plattformen zu integrieren und zu verwenden.</li>
- <li>Wartung der von Terraform bereitgestellten Infrastruktur verschiedener Teile der Plattformen.</li>
- </ul>
- </article>
- <article class="work__experience">
- <div class="job-position">
- <h2 class="job-position__company"><a href="https://sapera.com/">Sapera GmbH.</a></h2>
- <em class="job-position__title">Senior Developer/DevOps</em>
- <em class="job-position__duration">Apr. 2018 - Nov. 2021</em>
- <em class="job-position__location">Berlin, Germany</em>
- </div>
- <ul class="tasks">
- <li>
- Implementierte Infrastruktur als Code (<abbr>IaC</abbr>) für verschiedene Projekte mit Terraform und Ansible.
- </li>
- <li>Standardisierung des Bereitstellungsprozesses (und Pflege der Prozessdokumentation).</li>
- <li>Erstellte Vorlagen zur Bereitstellung von Infrastruktur auf verschiedenen Cloud-Anbietern und in Entwicklungsstadien.</li>
- <li>
- Aufbau standardisierter Workflows mit CircleCI zur Automatisierung von Bereitstellungen (für interne und externe Projekte).
- </li>
- <li>
- Implementierung und Wartung der (Rails 5) JSON-API für unsere
- <a href="#note1"> Infografik-Portal[1]</a>.
- </li>
- <li>
- Gepflegt 99+&percnt; Dokumentationsabdeckung des <a href="#note1"> Infografik-Portals[1]</a>. API
- und 90+% Testabdeckung.
- </li>
- <li>Arbeitete mit Docker zusammen, um Ergebnisse für einige unserer externen Projekte bereitzustellen.</li>
- <li>
- Unterstützung und Anleitung zur Arbeit mit unseren standardmäßigen Bereitstellungsworkflows (intern und extern).
- </li>
- <li>Arbeitete eng mit unserem Systemingenieur zusammen, um ihn bei verschiedenen DevOps-Aufgaben zu unterstützen.</li>
- <li>
- Einige der Datenpipelines wurden neu geschrieben, gewartet und bereitgestellt, um bessere Sicherheitsstandards einzuhalten.
- </li>
- </ul>
- <p class="note">
- <a id="note1" href="#note1">[1]</a> Eine funktionierende Version des Infografik-Portals wurde erworben von
- <a href="https://scrollytelling.net/">Scrolly Telling GmbH</a> und noch von ihnen bearbeitet wie gesehen bei
- <a href="https://five-times.com/">Five-Times</a>.
- </p>
- </article>
- <article class="work__experience">
- <div class="job-position">
- <h2 class="job-position__company"><a href="https://liqid.de/">LIQID GmbH.</a></h2>
- <em class="job-position__title">Senior Backend Developer</em>
- <em class="job-position__duration">Mar. 2016 - Dec. 2017</em>
- <em class="job-position__location">Berlin, Germany</em>
- </div>
- <ul class="tasks">
- <li>Wartung der RESTful-API (von Administratoren und Front-End verwendet).</li>
- <li>Umsetzung und Pflege der Integration mit der Deutschen Bank.</li>
- <li>
- Implementierung und Wartung der Integration mit Intercom
- <abbr title="Kundenbeziehungsmanagement">CRM.</abbr>
- </li>
- <li>Implementierung und Wartung des Rechnungssystems.</li>
- <li>
- Implementiert die neue Authentifizierungsschicht mit
- <a href="https://tools.ietf.org/html/rfc7519">(RFC7519: JWT)</a>.
- </li>
- <li>Die Zwei-Faktor-Authentifizierung (<abbr>2FA</abbr>) für die Benutzer-/Client-Anmeldung implementiert.</li>
- <li>Integrierte andere Dienste wie DocuSign, PostIdent,...</li>
- <li>Umgesetzte tägliche Geschäfts-/Marketing-/technische Anforderungen.</li>
- </ul>
- </article>
- <article class="work__experience">
- <div class="job-position">
- <h2 class="job-position__company">PrioriData GmbH.</h2>
- <em class="job-position__title">Full Stack Developer</em>
- <em class="job-position__duration">Jul. 2015 - Feb. 2016</em>
- <em class="job-position__location">Berlin, Germany</em>
- </div>
- <p class="note">Wurde von <a href="https://airnow.com/">Airnow Data Ltd.</a> übernommen.</p>
- <ul class="tasks">
- <li>Wartung der Rails-Web-App (Dashboard).</li>
- <li>Der Scraping-Prozess zum Abrufen der Daten aus Apple- und GooglePlay-Stores wurde optimiert.</li>
- <li>Warteschlangen und Überwachung rund um die Scraper neu implementiert.</li>
- <li>Migrierte erfasste Daten aus verschiedenen Ressourcen zu Google BigQuery.</li>
- <li>
- Wartung und Bereitstellung von <abbr title="Virtual Machines">VM</abbr>-Instanzen für verschiedene Zwecke bei Google
- Cloud-Plattform (mit chef).
- </li>
- <li>
- &#8220;Extract&#8221; Schritt in die
- <abbr title="Extract, Transform, Load">ETL</abbr>-Prozess (unter Verwendung eines API-basierten Crawlers anstelle von phantomJS
- Browser).
- </li>
- </ul>
- </article>
- <article class="work__experience">
- <div class="job-position">
- <h2 class="job-position__company">AskNative</h2>
- <em class="job-position__title">Backend Developer/DevOps</em>
- <em class="job-position__duration">May. 2013 - Jul. 2015</em>
- <em class="job-position__location">Remote, Egypt</em>
- </div>
- <ul class="tasks">
- <li>Implementierte die Testsuite für die API.</li>
- <li>Veranstaltungsbuchungsfunktion über Stripe implementiert.</li>
- <li>Neu implementiertes Caching für bessere Antwortzeiten.</li>
- <li>Wartung der Heroku-Stacks für Staging/Produktion.</li>
- <li>
- Große Teile der API neu implementiert, um besseren Designmustern zu folgen
- (Sechseckige Architektur und <abbr title="Publish-Subscribe">Pub/Sub</abbr>-Muster).
- </li>
- </ul>
- </article>
- </article>
-
- <article class="projects">
- <h2 class="projects_header section-header">Schreiben</h2>
- <article class="project">
- <h2 class="project__title">The Publish/Subscribe Pattern on Rails</h2>
- <p class="project__content">
- Ein
- <a href="https://www.toptal.com/ruby-on-rails/the-publish-subscribe-pattern-on-rails">
- Toptal veröffentlichter Blogbeitrag
- </a>
- zur Implementierung des <abbr title="Publish-Subscribe">Pub/Sub</abbr>-Musters in der Praxis von Rails-Anwendungen.
- </p>
- </article>
- <article class="project">
- <h2 class="project__title">Clean Code and the Art of Exception Handling</h2>
- <p class="project__content">
- Ein
- <a href="https://www.toptal.com/abap/clean-code-and-the-art-of-exception-handling">
- Toptal veröffentlichter Blogbeitrag
- </a>
- über verschiedene Taktiken und Strategien für die Ausnahmebehandlung und wie man sie einsetzt, um saubereren Code zu schreiben.
- </p>
- </article>
- <article class="project">
- <h2 class="project__title">
- <a href="https://git.sr.ht/~a14m/OTW"> Over The Wire Lösungen</a>
- </h2>
- <p class="project__content">
- Lösungen für einige der <a href="https://overthewire.org/wargames/">OTW-Kriegsspiele</a>
- in einem README-Dateiformat dokumentiert.
- </p>
- </article>
- <article class="project">
- <h2 class="project__title">
- <a href="https://git.sr.ht/~a14m/HTB"> Hack The Box Lösungen</a>
- </h2>
- <p class="project__content">
- Lernsicherheitsanalyse durch Dokumentieren der Lösungen für einige der
- <a href="https://hackthebox.eu">HTB-Maschinen</a>
- in einem README-Dateiformat.
- </p>
- </article>
- </article>
-
- <article class="projects">
- <h2 class="projects__header section-header">Projekte</h2>
- <article class="project">
- <h2 class="project__title">
- <a href="https://git.sr.ht/~a14m/game-of-life"> Conway's Game of Life </a>
- </h2>
- <p class="project__content">
- Ein Mono-Repo mit verschiedenen Implementierungen der Befehlszeilenschnittstelle (<abbr>CLI</abbr>) für die
- <a href="https://en.wikipedia.org/wiki/Conway%27s_Game_of_Life">Spiel des Lebens</a> in mehreren Sprachen
- (derzeit Ruby/Rust), mit der Automatisierung zum Veröffentlichen von Updates für verschiedene Paketmanager mit a
- Gitarrischer Workflow.
- </p>
- </article>
- <article class="project">
- <h2 class="project__title">
- <a href="https://git.sr.ht/~a14m/a14m.srht.site"> a14m.srht.site </a>
- </h2>
- <p class="project__content">Der Quellcode und die Bereitstellungsskripte für diese Website/diesen Lebenslauf.</p>
- </article>
- </article>
-
- <article class="education">
- <h2 class="education__header section-header">Ausbildung</h2>
- <article class="education__details">
- <h2 class="education__degree">B.E. in Computer Science and Engineering</h2>
- <p class="education__university">Arab Academy for Science and Technology</p>
- <p class="education__gpa">GPA 3.1/4.0 (B - Sehr Gut)</p>
- <em class="education__location">Alexandria, Egypt</em>
- <em class="education__duration">Sep. 2005 - Jan. 2011</em>
- </article>
- </article>
- </main>
- <footer></footer>
- </body>
-</html>
diff --git a/app/assets/index.html b/app/assets/index.html
deleted file mode 100644
index f40a7bc..0000000
--- a/app/assets/index.html
+++ /dev/null
@@ -1,310 +0,0 @@
-<!DOCTYPE html>
-<html lang="en">
- <head>
- <meta charset="utf-8" />
- <title>A14M</title>
- <link href="/web.css" rel="stylesheet" media="all" />
- <link href="/print.css" rel="stylesheet" media="print" />
- <link rel="shortcut icon" href="/favicon.ico" />
- <link rel="apple-touch-icon" sizes="180x180" href="/apple-touch-icon.png" />
- <link rel="icon" type="image/png" sizes="32x32" href="/favicon-32x32.png" />
- <link rel="icon" type="image/png" sizes="16x16" href="/favicon-16x16.png" />
- <link rel="manifest" href="/site.webmanifest" />
- <link rel="mask-icon" href="/safari-pinned-tab.svg" color="#000" />
- <meta name="msapplication-TileColor" content="#da532c" />
- <meta name="theme-color" content="#ffffff" />
-
- <meta name="author" content="Ahmed AbdelHalim" />
- <meta name="description" content="A14M · Platform Engineer/DevOps" />
- <meta name="keywords" content="DevOps, go, docker, ansible, python, bash, CI, CD, TDD, BDD, AWS, terraform, GCP, k8s, kubernetes, grafana, prometheus, loki, ELK" />
- <meta name="viewport" content="width=device-width, initial-scale=1.0" />
- <meta name="color-scheme" content="dark light" />
- </head>
-
- <body>
- <main>
- <header class="header">
- <a class="header__language" lang="de" href="/de.html">[DE]</a>
- <h1 class="header__name">Ahmed AbdelHalim</h1>
- <em class="header__job-title">Platform Engineer &centerdot; DevOps</em>
- <address class="header__contact-info">
- <div class="header__location">Berlin, Germany</div>
- <div class="header__tel"><a href="tel:+491770126386">+49 177 912 6386</a></div>
- <div class="header__email"><a href="mailto:[email protected]">[email protected]</a></div>
- <div class="header__website"><a href="https://a14m.me">website</a></div>
- <div class="header__srht"><a href="https://git.sr.ht/~a14m">sr.ht</a></div>
- <div class="header__github"><a href="https://github.com/a14m">Github</a></div>
- <div class="header__stackoverflow">
- <a href="https://stackoverflow.com/users/1769515/a14m">StackOverflow</a>
- </div>
- <div class="header__linkedin"><a href="https://www.linkedin.com/in/a14m">LinkedIn</a></div>
- <div class="header__pgp"><a href="/key.asc">PGP</a></div>
- </address>
- </header>
-
- <article class="summary">
- <h2 class="summary__header section-header">Summary</h2>
- <p class="summary__content">
- Platform engineer with
- 10+ years of experience in software development (backend/API focused),
- 5+ years in infrastructure automation and DevOps,
- hobbyist security analyst and tester.
- An avid fan of automation, sustainability, design patterns, and clean code.
- Always interested in deriving a better problem-solving method for challenging tasks,
- and learning sensible new technologies and tools (when the need arises).
- </p>
- </article>
- <article class="skills">
- <h2 class="skills__header section-header">Skills</h2>
- <dl class="skills__content">
- <dt class="skills__title">DevOps</dt>
- <dd class="skills__items">Kubernetes, Terraform, Docker, Ansible, CloudFoundry, Helm, Fastly, Vault,
- Concourse, Artifactory, ...
- </dd>
-
- <dt class="skills__title">Telemetry</dt>
- <dd class="skills__items">Grafana, Prometheus, Loki, <abbr title="Elasticsearch Logstash Kibana">ELK</abbr>,
- Sentry, Tempo.
- </dd>
-
- <dt class="skills__title">Coding</dt>
- <dd class="skills__items">Go, Ruby, Python, Bash, Rust.</dd>
-
- <dt class="skills__title">Paradigms</dt>
- <dd class="skills__items">
- Design Patterns, Test Driven Development (<abbr>TDD</abbr>), Behavior Driven Development (<abbr>BDD</abbr>),
- Continuous Integration and Delivery (<abbr>CI/CD</abbr>), Infrastructure as Code (<abbr>IaC</abbr>),
- Configuration as Code, RESTful APIs, Micro-Services.
- </dd>
-
- <dt class="skills__title">Tools</dt>
- <dd class="skills__items">
- vim, git, tmux, ssh, bash, kubectl, kubevela, ansible, helmfile, vagrant, docker, certbot, dig, bosh, vault,
- nc, nmap, curl, ffuf, gobuster, sqlmap, xxd, searchsploit, meta-sploit, commix, gdb, ltrace, ...
- </dd>
-
- <dt class="skills__title">Platforms</dt>
- <dd class="skills__items">
- Amazon Web Services (<abbr>AWS</abbr>), DigitalOcean, Heroku, Google Cloud Platform (<abbr>GCP</abbr>),
- Linux.
- </dd>
-
- <dt class="skills__title">Languages</dt>
- <dd class="skills__items">English (Professional), German (Basic), Arabic (Native).</dd>
- </dl>
- </article>
-
- <article class="work">
- <h2 class="work__header section-header">Work Experience</h2>
- <article class="work__experience">
- <div class="job-position">
- <h2 class="job-position__company">
- <a href="https://group.springernature.com/gp/group">Springer Nature AG & Co. KGaA</a>
- </h2>
- <em class="job-position__title">Platform Engineer</em>
- <em class="job-position__duration">Feb. 2022 - Aug. 2022</em>
- <em class="job-position__location">Berlin, Germany</em>
- </div>
- <p class="note">Working as part of the <b>Engineering Enablement</b> team, that provides infrastructure,
- internal tooling, docs, CloudFoundry platform, and Kubernetes clusters,
- to help the development teams with their daily tasks.</p>
- <ul class="tasks">
- <li>Worked on internal <a href="https://github.com/springernature/halfpipe">(halfpipe)</a>
- tooling for building CI/CD pipelines on Github actions and Concourse.</li>
- <li>Implemented reusable GitHub Actions workflows for deploying to CloudFoundry, Kubernetes, and
- Docker Registries.</li>
- <li>Implemented tooling to show and report Kubernetes deployment status (from CI/CD) to respective teams,
- and notify them on failure.
- </li>
- <li> Implemented alert-routing service, to integrate with Prometheus
- <a href="https://prometheus.io/docs/alerting/latest/alertmanager/">alert-manager</a>.
- And sends alerts to different teams/projects, and preconfigured Slack channels or emails.</li>
- <li>Maintained team docs used by other development teams, to integrate with and use internal platforms.</li>
- <li>Maintained terraform-provisioned infrastructure of different parts of the platforms.</li>
- </ul>
- </article>
- <article class="work__experience">
- <div class="job-position">
- <h2 class="job-position__company"><a href="https://sapera.com/">Sapera GmbH.</a></h2>
- <em class="job-position__title">Senior Developer/DevOps</em>
- <em class="job-position__duration">Apr. 2018 - Nov. 2021</em>
- <em class="job-position__location">Berlin, Germany</em>
- </div>
- <ul class="tasks">
- <li>
- Implemented infrastructure as code (<abbr>IaC</abbr>) for different projects using Terraform and Ansible.
- </li>
- <li>Standardized the deployment process (and maintained the process documentation).</li>
- <li>Built templates to provision infrastructure on different cloud providers and development stages.</li>
- <li>
- Built standardized workflows using CircleCI to automate deployments (for internal and external projects).
- </li>
- <li>
- Implemented and maintained the (Rails 5) JSON API serving our
- <a href="#note1"> infographics portal[1]</a>.
- </li>
- <li>
- Maintained 99+&percnt; documentation coverage of the <a href="#note1"> infographics portal[1]</a>. API
- and 90+&percnt; test coverage.
- </li>
- <li>Worked with Docker to provide deliverables for some of our external projects.</li>
- <li>
- Provided support and tutoring to work with our standard deployment workflows (internally and externally).
- </li>
- <li>Worked closely with our Systems Engineer to support with various DevOps tasks.</li>
- <li>
- Rewrote, maintained and provisioned some of the data pipelines to adhere to a better security standards.
- </li>
- </ul>
- <p class="note">
- <a id="note1" href="#note1">[1]</a> A working version of the infographics portal was acquired by
- <a href="https://scrollytelling.net/"> Scrolly Telling GmbH</a> and still worked on by them as seen at
- <a href="https://five-times.com/"> Five-Times</a>.
- </p>
- </article>
- <article class="work__experience">
- <div class="job-position">
- <h2 class="job-position__company"><a href="https://liqid.de/">LIQID GmbH.</a></h2>
- <em class="job-position__title">Senior Backend Developer</em>
- <em class="job-position__duration">Mar. 2016 - Dec. 2017</em>
- <em class="job-position__location">Berlin, Germany</em>
- </div>
- <ul class="tasks">
- <li>Maintained the RESTful API (used by admins and front-end).</li>
- <li>Implemented and maintained the integration with Deutsche Bank.</li>
- <li>
- Implemented and maintained the integration with Intercom
- <abbr title="Customer Relationship Management">CRM.</abbr>
- </li>
- <li>Implemented and maintained the Invoicing system.</li>
- <li>
- Implemented the new authentication layer using
- <a href="https://tools.ietf.org/html/rfc7519">(RFC7519: JWT)</a>.
- </li>
- <li>Implemented the Two-Factor Authentication (<abbr>2FA</abbr>) for user/client login.</li>
- <li>Integrated other services like DocuSign, PostIdent,...</li>
- <li>Implemented day to day business/marketing/technical requirements.</li>
- </ul>
- </article>
- <article class="work__experience">
- <div class="job-position">
- <h2 class="job-position__company">PrioriData GmbH.</h2>
- <em class="job-position__title">Full Stack Developer</em>
- <em class="job-position__duration">Jul. 2015 - Feb. 2016</em>
- <em class="job-position__location">Berlin, Germany</em>
- </div>
- <p class="note">Was acquired by <a href="https://airnow.com/">Airnow Data Ltd.</a></p>
- <ul class="tasks">
- <li>Maintained the Rails web (dashboard) app.</li>
- <li>Optimized the scraping process of getting the data from Apple and GooglePlay stores.</li>
- <li>Reimplemented the queueing and monitoring around the scrapers.</li>
- <li>Migrated acquired data from different resources to Google BigQuery.</li>
- <li>
- Maintained and provisioned different purpose <abbr title="Virtual Machines">VM</abbr> instances on Google
- Cloud Platform (using chef).
- </li>
- <li>
- Reimplemented the &#8220;Extract&#8221; step in the
- <abbr title="Extract, Transform, Load">ETL</abbr> process (using an API based crawler instead of phantomJS
- browser).
- </li>
- </ul>
- </article>
- <article class="work__experience">
- <div class="job-position">
- <h2 class="job-position__company">AskNative</h2>
- <em class="job-position__title">Backend Developer/DevOps</em>
- <em class="job-position__duration">May. 2013 - Jul. 2015</em>
- <em class="job-position__location">Remote, Egypt</em>
- </div>
- <ul class="tasks">
- <li>Implemented the test suite for the API.</li>
- <li>Implemented events booking feature via Stripe.</li>
- <li>Reimplemented caching for better response times.</li>
- <li>Maintained the Heroku stacks for staging/production.</li>
- <li>
- Reimplemented large portions of the API to follow better design patterns
- (Hexagonal Architecture, and <abbr title="Publish-Subscribe">Pub/Sub</abbr> pattern).
- </li>
- </ul>
- </article>
- </article>
-
- <article class="projects">
- <h2 class="projects_header section-header">Writing</h2>
- <article class="project">
- <h2 class="project__title">The Publish/Subscribe Pattern on Rails</h2>
- <p class="project__content">
- A
- <a href="https://www.toptal.com/ruby-on-rails/the-publish-subscribe-pattern-on-rails">
- Toptal published blog post
- </a>
- on implementing the <abbr title="Publish-Subscribe">Pub/Sub</abbr> pattern in practice in Rails apps.
- </p>
- </article>
- <article class="project">
- <h2 class="project__title">Clean Code and the Art of Exception Handling</h2>
- <p class="project__content">
- A
- <a href="https://www.toptal.com/abap/clean-code-and-the-art-of-exception-handling">
- Toptal published blog post
- </a>
- on different tactics and strategies for exception handling and how to employ them to write cleaner code.
- </p>
- </article>
- <article class="project">
- <h2 class="project__title">
- <a href="https://git.sr.ht/~a14m/OTW"> Over The Wire Solutions </a>
- </h2>
- <p class="project__content">
- Solutions for some of the <a href="https://overthewire.org/wargames/">OTW wargames</a>
- documented in a README files format.
- </p>
- </article>
- <article class="project">
- <h2 class="project__title">
- <a href="https://git.sr.ht/~a14m/HTB"> Hack The Box Solutions </a>
- </h2>
- <p class="project__content">
- Learning security analysis via documenting the solutions for some of the
- <a href="https://hackthebox.eu">HTB machines</a>
- in a README files format.
- </p>
- </article>
- </article>
-
- <article class="projects">
- <h2 class="projects__header section-header">Projects</h2>
- <article class="project">
- <h2 class="project__title">
- <a href="https://git.sr.ht/~a14m/game-of-life"> Conway's Game of Life </a>
- </h2>
- <p class="project__content">
- A mono-repo with different command line interface (<abbr>CLI</abbr>) implementations for the
- <a href="https://en.wikipedia.org/wiki/Conway%27s_Game_of_Life">Game of Life</a> in multiple languages
- (currently Ruby/Rust), with the automation for publishing updates to different package managers using a
- git-ish workflow.
- </p>
- </article>
- <article class="project">
- <h2 class="project__title">
- <a href="https://git.sr.ht/~a14m/a14m.srht.site"> a14m.srht.site </a>
- </h2>
- <p class="project__content">The source code, and deployment scripts for this website/CV.</p>
- </article>
- </article>
-
- <article class="education">
- <h2 class="education__header section-header">Education</h2>
- <article class="education__details">
- <h2 class="education__degree">B.E. in Computer Science and Engineering</h2>
- <p class="education__university">Arab Academy for Science and Technology</p>
- <p class="education__gpa">GPA 3.1/4.0 (B - Very Good)</p>
- <em class="education__location">Alexandria, Egypt</em>
- <em class="education__duration">Sep. 2005 - Jan. 2011</em>
- </article>
- </article>
- </main>
- <footer></footer>
- </body>
-</html>
diff --git a/app/assets/key.ssh b/app/assets/key.ssh
deleted file mode 100644
index 1a338cf..0000000
--- a/app/assets/key.ssh
+++ /dev/null
@@ -1 +0,0 @@
-ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAII/JOmFlvmNRH0U8KoEzwW/CG2En3T7PRRLIjwpDBfjb cardno:19_707_974
diff --git a/app/print.styl b/app/print.styl
deleted file mode 100644
index 41ca616..0000000
--- a/app/print.styl
+++ /dev/null
@@ -1,25 +0,0 @@
-@page {
- margin-left: 1cm
- margin-right: 1cm
-}
-
-body {
- font-size: 9pt
- line-height: 1.3
-}
-
-a:link, a:visited, a:hover, a:active {
- text-decoration-thickness: 1px
-}
-
-.section-header {
- font-size: 18pt
- margin-bottom: -0.6em
-}
-
-@require "stylesheets/print/header.styl"
-@require "stylesheets/print/summary.styl"
-@require "stylesheets/print/skills.styl"
-@require "stylesheets/print/work.styl"
-@require "stylesheets/print/projects.styl"
-@require "stylesheets/print/education.styl"
diff --git a/app/stylesheets/print/header.styl b/app/stylesheets/print/header.styl
deleted file mode 100644
index 7b982c2..0000000
--- a/app/stylesheets/print/header.styl
+++ /dev/null
@@ -1,21 +0,0 @@
-.header__name {
- margin-bottom: 0.1em
-}
-
-.header__language {
- display: none
-}
-
-.header__tel
-.header__website
-.header__email
-.header__srht
-.header__github
-.header__stackoverflow
-.header__linkedin {
- display: inline
-}
-
-.header__pgp {
- display: none
-}
diff --git a/app/stylesheets/print/projects.styl b/app/stylesheets/print/projects.styl
deleted file mode 100644
index be9dd75..0000000
--- a/app/stylesheets/print/projects.styl
+++ /dev/null
@@ -1,7 +0,0 @@
-.projects {
- margin-top: 75px
- page-break-inside: avoid
-}
-
-.project {
-}
diff --git a/app/stylesheets/print/skills.styl b/app/stylesheets/print/skills.styl
deleted file mode 100644
index e5bba67..0000000
--- a/app/stylesheets/print/skills.styl
+++ /dev/null
@@ -1,17 +0,0 @@
-.skills {
- margin-top: 75px
-}
-
-.skills__content {
- margin-top: 1.5em
-}
-
-.skills__title {
- min-width: 12%
- margin-left: 15px
-}
-
-.skills__items {
- margin-bottom: 0.1em
- margin-left: 15px
-}
diff --git a/app/stylesheets/web/education.styl b/app/stylesheets/web/education.styl
deleted file mode 100644
index cf54f19..0000000
--- a/app/stylesheets/web/education.styl
+++ /dev/null
@@ -1,58 +0,0 @@
-.education {
- // add empty space to the end of page (as big as the header)
- margin-bottom: 150px
-}
-
-.education__details {
- display: flex
- flex-flow: row wrap
- justify-content: space-between
- @media screen and (max-width: 780px) {
- flex-flow: column wrap
- }
-}
-
-.education__degree {
- min-width: 100%
- align-self: center
- font-size: 1.1em
- margin-bottom: 0
-}
-
-.education__university
-.education__gpa
-.education__duration
-.education__location {
- min-width: 50%
- margin: 0
-}
-
-.education__university {
-}
-
-.education__gpa {
- order: 3
- @media screen and (max-width: 780px) {
- order: 2
- }
-}
-
-.education__duration {
- order: 2
- text-align: right
- align-self: flex-end
- @media screen and (max-width: 780px) {
- text-align: left
- align-self: flex-start
- }
-}
-
-.education__location {
- order: 4
- text-align: right
- align-self: flex-end
- @media screen and (max-width: 780px) {
- text-align: left
- align-self: flex-start
- }
-}
diff --git a/app/stylesheets/web/header.styl b/app/stylesheets/web/header.styl
deleted file mode 100644
index 056db86..0000000
--- a/app/stylesheets/web/header.styl
+++ /dev/null
@@ -1,45 +0,0 @@
-.header {
- text-align: center
- font-style: normal
-}
-
-.header__language {
- float: right
- margin-top: 1em
- margin-bottom: -0.3em
-}
-
-.header__name {
- font-size: 3.3em
- margin-bottom: -0.2em
- clear: right
-}
-
-.header__job-title {
- font-style: italic
-}
-
-.header__contact-info {
- font-style: normal
-}
-
-.header__location {
- display: block
- font-style: italic
- margin-bottom: 1em
-}
-
-.header__tel
-.header__website {
- display: none
-}
-
-.header__email
-.header__srht
-.header__github
-.header__stackoverflow
-.header__pgp
-.header__linkedin {
- display: inline-block
- margin: 8px;
-}
diff --git a/app/stylesheets/web/projects.styl b/app/stylesheets/web/projects.styl
deleted file mode 100644
index f3889af..0000000
--- a/app/stylesheets/web/projects.styl
+++ /dev/null
@@ -1,21 +0,0 @@
-.projects {
-}
-
-.projects__header {
-}
-
-.project {
-}
-
-.project__title {
- margin-bottom: 0
- font-size: 1.1em
-
-}
-
-.project__content {
- margin-left: 1.2em
- margin-right: 1.2em
- margin-top: 0.3em
- margin-bottom: 1.5em
-}
diff --git a/app/stylesheets/web/skills.styl b/app/stylesheets/web/skills.styl
deleted file mode 100644
index 29e9fd3..0000000
--- a/app/stylesheets/web/skills.styl
+++ /dev/null
@@ -1,31 +0,0 @@
-.skills {
-}
-
-.skills__header {
-}
-
-.skills__content {
- display: flex
- flex-flow: row wrap
-
-}
-
-.skills__title {
- min-width: 14%
- text-align: right
- font-weight: 900
- @media screen and (max-width: 780px) {
- text-align: left
- }
-}
-
-.skills__items {
- width: 80%
- margin-bottom: 0.1em
- margin-left: 25px
-
- @media screen and (max-width: 780px) {
- margin-bottom: 1em
- width: 100%
- }
-}
diff --git a/app/stylesheets/web/summary.styl b/app/stylesheets/web/summary.styl
deleted file mode 100644
index dfcb412..0000000
--- a/app/stylesheets/web/summary.styl
+++ /dev/null
@@ -1,8 +0,0 @@
-.section-header.summary__header {
- display: none
-}
-
-.summary__content {
- text-align: justify
- margin-top: 1.5em
-}
diff --git a/app/stylesheets/web/work.styl b/app/stylesheets/web/work.styl
deleted file mode 100644
index a989349..0000000
--- a/app/stylesheets/web/work.styl
+++ /dev/null
@@ -1,81 +0,0 @@
-.work {
-}
-
-.work__header {
-}
-
-.work__experience {
-}
-
-.work__experience {
- &:after {
- display: flex
- content: ""
- border-bottom: 1px solid
- margin: auto
- max-width: 30%
- }
- &:last-of-type:after {
- // remove the extra horizontal line after the last work__experience
- display: none
- }
-}
-
-.job-position {
- display: flex
- flex-flow: row wrap
- justify-content: space-between
- @media screen and (max-width: 780px) {
- flex-flow: column wrap
- }
-}
-
-.job-position__company
-.job-position__title
-.job-position__duration
-.job-position__location {
- min-width: 50%
-}
-
-.job-position__company {
- order: 0
- margin-bottom: 0
- font-size: 1.4em
-}
-
-.job-position__title {
- order: 2
- @media screen and (max-width: 780px) {
- order: 1
- }
-}
-
-.job-position__duration {
- order: 1
- text-align: right
- align-self: flex-end
- @media screen and (max-width: 780px) {
- order: 2
- text-align: left
- align-self: flex-start
- }
-}
-
-.job-position__location {
- order: 3
- text-align: right
- align-self: flex-end
- @media screen and (max-width: 780px) {
- text-align: left
- align-self: flex-start
- }
-}
-
-.note {
- margin-top: 0.4em
- margin-bottom: 0.4em
-}
-
-.tasks {
- margin-top: 0.4em
-}
diff --git a/app/web.styl b/app/web.styl
deleted file mode 100644
index 7320840..0000000
--- a/app/web.styl
+++ /dev/null
@@ -1,65 +0,0 @@
-secondaryColor = #DB0A16
-
-@media (prefers-color-scheme: dark) {
- html {
- color: #FFFFFF
- background-color: #181818
- }
-}
-
-@media (prefers-color-scheme: light) {
- html {
- color: #000000
- background-color: #FFFFFF
- }
-}
-
-body {
- font-family: "PT Sans", "Kohinoor Bangla", sans-serif
- max-width: 1024px
- min-width: 375px
- margin: 0 auto
- float: none
- line-height: 1.5
-}
-
-main {
- margin-left: 1cm
- margin-right: 1cm
-}
-
-a:link, a:visited, a:hover, a:active {
- text-decoration-color: secondaryColor
- text-decoration-thickness: 2px
- text-underline-offset: 2px
- color: inherit
-}
-
-.section-header {
- display: flex
- flex-direction: row
- margin-bottom: -0.3em
-
- &:before {
- content: "";
- border-bottom: 1px solid
- margin: auto;
- margin-right: 0.5em
- flex: 5 5;
- }
-
- &:after {
- content: "";
- border-bottom: 1px solid
- margin: auto;
- margin-left: 0.5em
- flex: 100 0;
- }
-}
-
-@require "stylesheets/web/header.styl"
-@require "stylesheets/web/summary.styl"
-@require "stylesheets/web/skills.styl"
-@require "stylesheets/web/work.styl"
-@require "stylesheets/web/projects.styl"
-@require "stylesheets/web/education.styl"
diff --git a/archetypes/default.md b/archetypes/default.md
new file mode 100644
index 0000000..00e77bd
--- /dev/null
+++ b/archetypes/default.md
@@ -0,0 +1,6 @@
+---
+title: "{{ replace .Name "-" " " | title }}"
+date: {{ .Date }}
+draft: true
+---
+
diff --git a/app/stylesheets/print/summary.styl b/assets/.keep
index e69de29..e69de29 100644
--- a/app/stylesheets/print/summary.styl
+++ b/assets/.keep
diff --git a/assets/scss/print.scss b/assets/scss/print.scss
new file mode 100644
index 0000000..0729cec
--- /dev/null
+++ b/assets/scss/print.scss
@@ -0,0 +1,3 @@
+$secondaryColor: #DB0A16;
+@import "print/base", "print/header", "print/summary", "print/skills",
+ "print/work", "print/projects", "print/education"
diff --git a/assets/scss/print/_base.scss b/assets/scss/print/_base.scss
new file mode 100644
index 0000000..ab0ca17
--- /dev/null
+++ b/assets/scss/print/_base.scss
@@ -0,0 +1,18 @@
+@page {
+ margin-left: 1cm;
+ margin-right: 1cm;
+}
+
+body {
+ font-size: 9pt;
+ line-height: 1.3;
+}
+
+a:link, a:visited, a:hover, a:active {
+ text-decoration-thickness: 1px;
+}
+
+.section-header {
+ font-size: 18pt;
+ margin-bottom: -0.6em;
+}
diff --git a/app/stylesheets/print/education.styl b/assets/scss/print/_education.scss
index ebefd27..fd0ba28 100644
--- a/app/stylesheets/print/education.styl
+++ b/assets/scss/print/_education.scss
@@ -1,11 +1,11 @@
.education {
// avoid page breaks inside the education section
- page-break-inside: avoid
- margin-top: 75px
+ page-break-inside: avoid;
+ margin-top: 75px;
// remove the extra space added for the website
- margin-bottom: 0
+ margin-bottom: 0;
}
.education__details {
- margin-top: 0.3em
+ margin-top: 0.3em;
}
diff --git a/assets/scss/print/_header.scss b/assets/scss/print/_header.scss
new file mode 100644
index 0000000..652031a
--- /dev/null
+++ b/assets/scss/print/_header.scss
@@ -0,0 +1,21 @@
+.header__name {
+ margin-bottom: 0.1em;
+}
+
+.header__language {
+ display: none;
+}
+
+.header__tel,
+.header__website,
+.header__email,
+.header__srht,
+.header__github,
+.header__stackoverflow,
+.header__linkedin {
+ display: inline;
+}
+
+.header__pgp {
+ display: none;
+}
diff --git a/assets/scss/print/_projects.scss b/assets/scss/print/_projects.scss
new file mode 100644
index 0000000..c7fa414
--- /dev/null
+++ b/assets/scss/print/_projects.scss
@@ -0,0 +1,7 @@
+.projects {
+ margin-top: 75px;
+ page-break-inside: avoid;
+}
+
+.project {
+}
diff --git a/assets/scss/print/_skills.scss b/assets/scss/print/_skills.scss
new file mode 100644
index 0000000..9d37b90
--- /dev/null
+++ b/assets/scss/print/_skills.scss
@@ -0,0 +1,17 @@
+.skills {
+ margin-top: 75px;
+}
+
+.skills__content {
+ margin-top: 1.5em;
+}
+
+.skills__title {
+ min-width: 12%;
+ margin-left: 15px;
+}
+
+.skills__items {
+ margin-bottom: 0.1em;
+ margin-left: 15px;
+}
diff --git a/assets/scss/print/_summary.scss b/assets/scss/print/_summary.scss
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/assets/scss/print/_summary.scss
diff --git a/app/stylesheets/print/work.styl b/assets/scss/print/_work.scss
index 63368ae..9495eb0 100644
--- a/app/stylesheets/print/work.styl
+++ b/assets/scss/print/_work.scss
@@ -1,14 +1,14 @@
.work {
- margin-top: 75px
+ margin-top: 75px;
}
.work__experience {
- page-break-inside: avoid
+ page-break-inside: avoid;
}
// Style the Company name links in the PDF with thicker underline
.job-position__company {
a:link, a:visited, a:hover, a:active {
- text-decoration-thickness: 2px
+ text-decoration-thickness: 2px;
}
}
diff --git a/assets/scss/web.scss b/assets/scss/web.scss
new file mode 100644
index 0000000..72f80a1
--- /dev/null
+++ b/assets/scss/web.scss
@@ -0,0 +1,3 @@
+$secondaryColor: #DB0A16;
+@import "web/base", "web/header", "web/summary", "web/skills",
+ "web/work", "web/projects", "web/education"
diff --git a/assets/scss/web/_base.scss b/assets/scss/web/_base.scss
new file mode 100644
index 0000000..309b144
--- /dev/null
+++ b/assets/scss/web/_base.scss
@@ -0,0 +1,56 @@
+@media (prefers-color-scheme: dark) {
+ html {
+ color: #FFFFFF;
+ background-color: #181818;
+ }
+}
+
+@media (prefers-color-scheme: light) {
+ html {
+ color: #000000;
+ background-color: #FFFFFF;
+ }
+}
+
+body {
+ font-family: "PT Sans", "Kohinoor Bangla", sans-serif;
+ max-width: 1024px;
+ min-width: 375px;
+ margin: 0 auto;
+ float: none;
+ line-height: 1.5;
+}
+
+main {
+ margin-left: 1cm;
+ margin-right: 1cm;
+}
+
+a:link, a:visited, a:hover, a:active {
+ text-decoration-color: $secondaryColor;
+ text-decoration-thickness: 2px;
+ text-underline-offset: 2px;
+ color: inherit;
+}
+
+.section-header {
+ display: flex;
+ flex-direction: row;
+ margin-bottom: -0.3em;
+
+ &:before {
+ content: "";
+ border-bottom: 1px solid;
+ margin: auto;
+ margin-right: 0.5em;
+ flex: 5 5;
+ }
+
+ &:after {
+ content: "";
+ border-bottom: 1px solid;
+ margin: auto;;
+ margin-left: 0.5em;
+ flex: 100 0;
+ }
+}
diff --git a/assets/scss/web/_education.scss b/assets/scss/web/_education.scss
new file mode 100644
index 0000000..51179e3
--- /dev/null
+++ b/assets/scss/web/_education.scss
@@ -0,0 +1,58 @@
+.education {
+ // add empty space to the end of page (as big as the header)
+ margin-bottom: 150px;
+}
+
+.education__details {
+ display: flex;
+ flex-flow: row wrap;
+ justify-content: space-between;
+ @media screen and (max-width: 780px) {
+ flex-flow: column wrap;
+ }
+}
+
+.education__degree {
+ min-width: 100%;
+ align-self: center;
+ font-size: 1.1em;
+ margin-bottom: 0;
+}
+
+.education__university,
+.education__gpa,
+.education__duration,
+.education__location {
+ min-width: 50%;
+ margin: 0;
+}
+
+.education__university {
+}
+
+.education__gpa {
+ order: 3;
+ @media screen and (max-width: 780px) {
+ order: 2;
+ }
+}
+
+.education__duration {
+ order: 2;
+ text-align: right;
+ align-self: flex-end;
+ @media screen and (max-width: 780px) {
+ text-align: left;
+ align-self: flex-start;
+ }
+}
+
+.education__location {
+ order: 4;
+ text-align: right;
+ align-self: flex-end;
+ @media screen and (max-width: 780px) {
+ text-align: left;
+ align-self: flex-start;
+ }
+}
diff --git a/assets/scss/web/_header.scss b/assets/scss/web/_header.scss
new file mode 100644
index 0000000..1037114
--- /dev/null
+++ b/assets/scss/web/_header.scss
@@ -0,0 +1,45 @@
+.header {
+ text-align: center;
+ font-style: normal;
+}
+
+.header__language {
+ float: right;
+ margin-top: 1em;
+ margin-bottom: -0.3em;
+}
+
+.header__name {
+ font-size: 3.3em;
+ margin-bottom: -0.2em;
+ clear: right;
+}
+
+.header__job-title {
+ font-style: italic;
+}
+
+.header__contact-info {
+ font-style: normal;
+}
+
+.header__location {
+ display: block;
+ font-style: italic;
+ margin-bottom: 1em;
+}
+
+.header__tel,
+.header__website {
+ display: none;
+}
+
+.header__email,
+.header__srht,
+.header__github,
+.header__stackoverflow,
+.header__pgp,
+.header__linkedin {
+ display: inline-block;
+ margin: 8px;
+}
diff --git a/assets/scss/web/_projects.scss b/assets/scss/web/_projects.scss
new file mode 100644
index 0000000..d0af4ed
--- /dev/null
+++ b/assets/scss/web/_projects.scss
@@ -0,0 +1,21 @@
+.projects {
+}
+
+.projects__header {
+}
+
+.project {
+}
+
+.project__title {
+ margin-bottom: 0;
+ font-size: 1.1em;
+
+}
+
+.project__content {
+ margin-left: 1.2em;
+ margin-right: 1.2em;
+ margin-top: 0.3em;
+ margin-bottom: 1.5em;
+}
diff --git a/assets/scss/web/_skills.scss b/assets/scss/web/_skills.scss
new file mode 100644
index 0000000..5ce9831
--- /dev/null
+++ b/assets/scss/web/_skills.scss
@@ -0,0 +1,31 @@
+.skills {
+}
+
+.skills__header {
+}
+
+.skills__content {
+ display: flex;
+ flex-flow: row wrap;
+
+}
+
+.skills__title {
+ min-width: 14%;
+ text-align: right;
+ font-weight: 900;
+ @media screen and (max-width: 780px) {
+ text-align: left;
+ }
+}
+
+.skills__items {
+ width: 80%;
+ margin-bottom: 0.1em;
+ margin-left: 25px;
+
+ @media screen and (max-width: 780px) {
+ margin-bottom: 1em;
+ width: 100%;
+ }
+}
diff --git a/assets/scss/web/_summary.scss b/assets/scss/web/_summary.scss
new file mode 100644
index 0000000..688945e
--- /dev/null
+++ b/assets/scss/web/_summary.scss
@@ -0,0 +1,8 @@
+.section-header.summary__header {
+ display: none;
+}
+
+.summary__content {
+ text-align: justify;
+ margin-top: 1.5em;
+}
diff --git a/assets/scss/web/_work.scss b/assets/scss/web/_work.scss
new file mode 100644
index 0000000..958859e
--- /dev/null
+++ b/assets/scss/web/_work.scss
@@ -0,0 +1,81 @@
+.work {
+}
+
+.work__header {
+}
+
+.work__experience {
+}
+
+.work__experience {
+ &:after {
+ display: flex;
+ content: "";
+ border-bottom: 1px solid;
+ margin: auto;
+ max-width: 30%;
+ }
+ &:last-of-type:after {
+ // remove the extra horizontal line after the last work__experience
+ display: none;
+ }
+}
+
+.job-position {
+ display: flex;
+ flex-flow: row wrap;
+ justify-content: space-between;
+ @media screen and (max-width: 780px) {
+ flex-flow: column wrap;
+ }
+}
+
+.job-position__company,
+.job-position__title,
+.job-position__duration,
+.job-position__location {
+ min-width: 50%;
+}
+
+.job-position__company {
+ order: 0;
+ margin-bottom: 0;
+ font-size: 1.4em;
+}
+
+.job-position__title {
+ order: 2;
+ @media screen and (max-width: 780px) {
+ order: 1;
+ }
+}
+
+.job-position__duration {
+ order: 1;
+ text-align: right;
+ align-self: flex-end;
+ @media screen and (max-width: 780px) {
+ order: 2;
+ text-align: left;
+ align-self: flex-start;
+ }
+}
+
+.job-position__location {
+ order: 3;
+ text-align: right;
+ align-self: flex-end;
+ @media screen and (max-width: 780px) {
+ text-align: left;
+ align-self: flex-start;
+ }
+}
+
+.note {
+ margin-top: 0.4em;
+ margin-bottom: 0.4em;
+}
+
+.tasks {
+ margin-top: 0.4em;
+}
diff --git a/brunch-config.js b/brunch-config.js
deleted file mode 100644
index 445e944..0000000
--- a/brunch-config.js
+++ /dev/null
@@ -1,17 +0,0 @@
-module.exports = {
- files: {
- javascripts: { joinTo: "app.js" },
- stylesheets: {
- joinTo: {
- "web.css": ["app/web.styl"],
- "print.css": ["app/print.styl"],
- },
- },
- },
- plugins: {
- stylus: {},
- cleancss: {
- level: 2
- },
- },
-};
diff --git a/content/.keep b/content/.keep
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/content/.keep
diff --git a/data/.keep b/data/.keep
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/data/.keep
diff --git a/data/home/index.yaml b/data/home/index.yaml
new file mode 100644
index 0000000..5848a6d
--- /dev/null
+++ b/data/home/index.yaml
@@ -0,0 +1,48 @@
+Meta:
+ Name: Ahmed AbdelHalim
+ Title: Platform Engineer · DevOps
+ Location: Berlin, Germany
+ Phone: +49 177 912 6386
+ Srht: https://git.sr.ht/~a14m
+ Github: https://github.com/a14m
+ StackOverflow: https://stackoverflow.com/users/1769515/a14m
+ LinkedIn: https://www.linkedin.com/in/a14m
+
+Summary:
+ Platform engineer with 10+ years of experience in software development
+ (backend/API focused), 5+ years in infrastructure automation and DevOps,
+ hobbyist security analyst and tester. An avid fan of automation,
+ sustainability, design patterns, and clean code. Always interested in deriving
+ a better problem-solving method for challenging tasks, and learning sensible
+ new technologies and tools (when the need arises).
+
+Skills:
+ - DevOps:
+ Kubernetes, Terraform, Docker, Ansible, CloudFoundry, Helm, Fastly,
+ Vault, Concourse, Artifactory, ...
+ - Telemetry:
+ Grafana, Prometheus, Loki, ELK, Sentry, Tempo.
+ - Coding:
+ Go, Ruby, Python, Bash, Rust.
+ - Paradigms:
+ Design Patterns, Test Driven Development (TDD),
+ Behavior Driven Development (BDD),
+ Continuous Integration and Delivery (CI/CD), Infrastructure as Code (IaC),
+ Configuration as Code, RESTful APIs, Micro-Services.
+ - Tools:
+ vim, git, tmux, ssh, bash, kubectl, kubevela, ansible, helmfile, vagrant,
+ docker, certbot, dig, bosh, vault, nc, nmap, curl, ffuf, gobuster, sqlmap,
+ xxd, searchsploit, meta-sploit, commix, gdb, ltrace, ...
+ - Platforms:
+ Amazon Web Services (AWS), DigitalOcean,
+ Heroku, Google Cloud Platform (GCP), Linux.
+ - Languages:
+ English (Professional), German (Basic), Arabic (Native).
+
+Education:
+ Degree: B.E. in Computer Science and Engineering
+ University: Arab Academy for Science and Technology
+ GPA: GPA 3.1/4.0 (B - Very Good)
+ Duration: Sep. 2005 - Jan. 2011
+ Location: Alexandria, Egypt
diff --git a/data/home/projects.yaml b/data/home/projects.yaml
new file mode 100644
index 0000000..7aeed8b
--- /dev/null
+++ b/data/home/projects.yaml
@@ -0,0 +1,11 @@
+Projects:
+ - title: <a href="https://git.sr.ht/~a14m/game-of-life"> Conway's Game of Life </a>
+ content:
+ A mono-repo with different command line interface (<abbr>CLI</abbr>) implementations for the
+ <a href="https://en.wikipedia.org/wiki/Conway%27s_Game_of_Life">Game of Life</a> in multiple languages
+ (currently Ruby/Rust), with the automation for publishing updates to
+ different package managers using a git-ish workflow.
+
+ - title: <a href="https://git.sr.ht/~a14m/a14m.srht.site"> a14m.srht.site </a>
+ content:
+ The source code, and deployment scripts for this website/CV/blog.
diff --git a/data/home/work.yaml b/data/home/work.yaml
new file mode 100644
index 0000000..0b59d35
--- /dev/null
+++ b/data/home/work.yaml
@@ -0,0 +1,81 @@
+Work:
+ - Company: <a href="https://group.springernature.com/gp/group">Springer Nature AG & Co. KGaA</a>
+ Title: Platform Engineer
+ Duration: Feb. 2022 - Aug. 2022
+ Location: Berlin, Germany
+ Note:
+ Working as part of the <b>Engineering Enablement</b> team, who provides infrastructure, internal tooling, docs,
+ CloudFoundry platform, and Kubernetes clusters, to help the development teams with their daily tasks.
+ Tasks:
+ - Worked on internal <a href="https://github.com/springernature/halfpipe">(halfpipe)</a>
+ tooling for building CI/CD pipelines on Github actions and Concourse.
+ - Implemented reusable GitHub Actions workflows for deploying to CloudFoundry, Kubernetes, and Docker Registries.
+ - Implemented tooling to show and report Kubernetes deployment status (from CI/CD) to respective teams,
+ and notify them on failure.
+ - Implemented alert-routing service, to integrate with Prometheus
+ <a href="https://prometheus.io/docs/alerting/latest/alertmanager/">alert-manager</a>.
+ And sends alerts to different teams/projects, and preconfigured Slack channels or emails.
+ - Maintained team docs used by other development teams, to integrate with and use internal platforms.
+ - Maintained terraform-provisioned infrastructure of different parts of the platforms.
+
+ - Company: <a href="https://sapera.com/">Sapera GmbH.</a>
+ Title: Senior Developer/DevOps
+ Duration: Apr. 2018 - Nov. 2021
+ Location: Berlin, Germany
+ Tasks:
+ - Implemented infrastructure as code (IaC) for different projects using Terraform and Ansible.
+ - Standardized the deployment process (and maintained the process documentation).
+ - Built templates to provision infrastructure on different cloud providers and development stages.
+ - Built standardized workflows using CircleCI to automate deployments (for internal and external projects).
+ - Implemented and maintained the (Rails 5) JSON API serving our <a href="#note1"> infographics portal[1]</a>.
+ - Maintained 99+&percnt; documentation coverage of the <a href="#note1"> infographics portal[1]</a>. API
+ and 90+&percnt; test coverage.
+ - Worked with Docker to provide deliverables for some of our external projects.
+ - Provided support and tutoring to work with our standard deployment workflows (internally and externally).
+ - Worked closely with our Systems Engineer to support with various DevOps tasks.
+ - Rewrote, maintained and provisioned some of the data pipelines to adhere to a better security standards.
+ FootNote:
+ <a id="note1" href="#note1">[1]</a> A working version of the infographics portal was acquired by
+ <a href="https://scrollytelling.net/"> Scrolly Telling GmbH</a> and still worked on by them as seen at
+ <a href="https://five-times.com/"> Five-Times</a>.
+
+ - Company: <a href="https://liqid.de/">LIQID GmbH.</a>
+ Title: Senior Backend Developer
+ Duration: Mar. 2016 - Dec. 2017
+ Location: Berlin, Germany
+ Tasks:
+ - Maintained the RESTful API (used by admins and front-end).
+ - Implemented and maintained the integration with Deutsche Bank.
+ - Implemented and maintained the integration with Intercom
+ <abbr title="Customer Relationship Management">CRM.</abbr>
+ - Implemented and maintained the Invoicing system.
+ - Implemented the new authentication layer using
+ <a href="https://tools.ietf.org/html/rfc7519">(RFC7519&colon; JWT)</a>.
+ - Implemented the Two-Factor Authentication (2FA) for user/client login.
+ - Integrated other services like DocuSign, PostIdent,...
+ - Implemented day to day business/marketing/technical requirements.
+
+ - Company: PrioriData GmbH.
+ Title: Full Stack Developer
+ Duration: Jul. 2015 - Feb. 2016
+ Location: Berlin, Germany
+ Note: Was acquired by <a href="https://airnow.com/">Airnow Data Ltd.</a>
+ Tasks:
+ - Maintained the Rails web (dashboard) app.
+ - Optimized the scraping process of getting the data from Apple and GooglePlay stores.
+ - Reimplemented the queueing and monitoring around the scrapers.
+ - Migrated acquired data from different resources to Google BigQuery.
+ - Maintained and provisioned different purpose VM instances on Google Cloud Platform (using chef).
+ - Reimplemented the “Extract” step in the ETL process (using an API based crawler instead of phantomJS browser).
+
+ - Company: AskNative
+ Title: Backend Developer/DevOps
+ Duration: May. 2013 - Jul. 2015
+ Location: Remote, Egypt
+ Tasks:
+ - Implemented the test suite for the API.
+ - Implemented events booking feature via Stripe.
+ - Reimplemented caching for better response times.
+ - Maintained the Heroku stacks for staging/production.
+ - Reimplemented large portions of the API to follow better design patterns
+ (Hexagonal Architecture, and <abbr title="Publish-Subscribe">Pub/Sub</abbr> pattern).
diff --git a/data/home/writing.yaml b/data/home/writing.yaml
new file mode 100644
index 0000000..de93987
--- /dev/null
+++ b/data/home/writing.yaml
@@ -0,0 +1,29 @@
+Writing:
+ - title: The Publish/Subscribe Pattern on Rails
+ content:
+ A
+ <a href="https://www.toptal.com/ruby-on-rails/the-publish-subscribe-pattern-on-rails">
+ Toptal published blog post
+ </a>
+ on implementing the <abbr title="Publish-Subscribe">Pub/Sub</abbr>
+ pattern in practice in Rails apps.
+
+ - title: Clean Code and the Art of Exception Handling
+ content:
+ A
+ <a href="https://www.toptal.com/abap/clean-code-and-the-art-of-exception-handling">
+ Toptal published blog post
+ </a>
+ on different tactics and strategies for exception handling
+ and how to employ them to write cleaner code.
+
+ - title: <a href="https://git.sr.ht/~a14m/OTW"> Over The Wire Solutions </a>
+ content:
+ Solutions for some of the <a href="https://overthewire.org/wargames/">OTW wargames</a>
+ documented in a README files format.
+
+ - title: <a href="https://git.sr.ht/~a14m/HTB"> Hack The Box Solutions </a>
+ content:
+ Learning security analysis via documenting the solutions for some of the
+ <a href="https://hackthebox.eu">HTB machines</a>
+ in a README files format.
diff --git a/hugo.yaml b/hugo.yaml
new file mode 100644
index 0000000..2f585c6
--- /dev/null
+++ b/hugo.yaml
@@ -0,0 +1,4 @@
+baseURL: "https://a14m.me/"
+languageCode: "en"
+title: "A14M"
+enableRobotsTXT: true
diff --git a/layouts/.keep b/layouts/.keep
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/layouts/.keep
diff --git a/layouts/home.html b/layouts/home.html
new file mode 100644
index 0000000..d937da3
--- /dev/null
+++ b/layouts/home.html
@@ -0,0 +1,24 @@
+<html lang="{{ .Site.LanguageCode }}">
+ <head>
+ <title>{{ .Site.Title }}</title>
+ {{ $web := resources.Get "scss/web.scss" }}
+ {{ $style := $web | toCSS | minify | fingerprint }}
+ <link rel="stylesheet" href="{{ $style.Permalink }}" media="all" integrity="{{ $style.Data.Integrity }}">
+ {{ $print := resources.Get "scss/print.scss" }}
+ {{ $style := $print | toCSS | minify | fingerprint }}
+ <link rel="stylesheet" href="{{ $style.Permalink }}" media="print" integrity="{{ $style.Data.Integrity }}">
+ {{ partial "head/metadata" .Site.Data.home.index.Meta }}
+ </head>
+ <body>
+ <main>
+ {{ partial "home/header.html" .Site.Data.home.index.Meta }}
+ {{ partial "home/summary.html" .Site.Data.home.index.Summary }}
+ {{ partial "home/skills.html" .Site.Data.home.index.Skills }}
+ {{ partial "home/work.html" .Site.Data.home.work.Work }}
+ {{ partial "home/projects.html" .Site.Data.home.writing }}
+ {{ partial "home/projects.html" .Site.Data.home.projects }}
+ {{ partial "home/education.html" .Site.Data.home.index.Education }}
+ </main>
+ </body>
+ <footer></footer>
+</html>
diff --git a/layouts/partials/head/metadata.html b/layouts/partials/head/metadata.html
new file mode 100644
index 0000000..f49b401
--- /dev/null
+++ b/layouts/partials/head/metadata.html
@@ -0,0 +1,15 @@
+<meta charset="utf-8" />
+<meta name="author" content="{{ .Name }}" />
+<meta name="description" content="A14M · {{ .Title }}" />
+<meta name="keywords" content="DevOps, go, docker, ansible, python, bash, CI, CD, TDD, BDD, AWS, terraform, GCP, k8s, kubernetes, grafana, prometheus, loki, ELK" />
+<meta name="viewport" content="width=device-width, initial-scale=1.0" />
+<meta name="color-scheme" content="dark light" />
+
+<link rel="shortcut icon" href="/ico/favicon.ico" />
+<link rel="apple-touch-icon" sizes="180x180" href="/ico/apple-touch-icon.png" />
+<link rel="icon" type="image/png" sizes="32x32" href="/ico/favicon-32x32.png" />
+<link rel="icon" type="image/png" sizes="16x16" href="/ico/favicon-16x16.png" />
+<link rel="manifest" href="/ico/site.webmanifest" />
+<link rel="mask-icon" href="/ico/safari-pinned-tab.svg" color="#000" />
+<meta name="msapplication-TileColor" content="#da532c" />
+<meta name="theme-color" content="#ffffff" />
diff --git a/layouts/partials/home/education.html b/layouts/partials/home/education.html
new file mode 100644
index 0000000..e6f82ba
--- /dev/null
+++ b/layouts/partials/home/education.html
@@ -0,0 +1,10 @@
+<article class="education">
+ <h2 class="education__header section-header">Education</h2>
+ <article class="education__details">
+ <h2 class="education__degree">{{ .Degree }}</h2>
+ <p class="education__university">{{ .University }}</p>
+ <p class="education__gpa">{{ .GPA }}</p>
+ <em class="education__location">{{ .Location }}</em>
+ <em class="education__duration">{{ .Duration }}</em>
+ </article>
+</article>
diff --git a/layouts/partials/home/header.html b/layouts/partials/home/header.html
new file mode 100644
index 0000000..7b4d50c
--- /dev/null
+++ b/layouts/partials/home/header.html
@@ -0,0 +1,15 @@
+<header class="header">
+ <h1 class="header__name">{{ .Name }}</h1>
+ <em class="header__job-title">{{ .Title }}</em>
+ <address class="header__contact-info">
+ <div class="header__location">{{ .Location }}</div>
+ <div class="header__tel"><a href="tel:{{ .Phone }}">{{ .Phone }}</a></div>
+ <div class="header__email"><a href="mailto:{{ .Email }}">{{ .Email }}</a></div>
+ <div class="header__website"><a href="{{ .Site.BaseURL }}">website</a></div>
+ <div class="header__srht"><a href="{{ .Srht }}">sr.ht</a></div>
+ <div class="header__github"><a href="{{ .Github }}">Github</a></div>
+ <div class="header__stackoverflow"><a href="{{ .StackOverflow }}">StackOverflow</a></div>
+ <div class="header__linkedin"><a href="{{ .LinkedIn }}">LinkedIn</a></div>
+ <div class="header__pgp"><a href="{{ absURL "/gpg.key" }}">PGP</a></div>
+ </address>
+</header>
diff --git a/layouts/partials/home/projects.html b/layouts/partials/home/projects.html
new file mode 100644
index 0000000..d9ac5e2
--- /dev/null
+++ b/layouts/partials/home/projects.html
@@ -0,0 +1,11 @@
+{{ range $header, $projects := . }}
+<article class="projects">
+ <h2 class="projects_header section-header">{{ $header }}</h2>
+ {{ range $projects }}
+ <article class="project">
+ <h2 class="project__title">{{ .title | safeHTML }}</h2>
+ <p class="project__content">{{ .content | safeHTML }}</p>
+ </article>
+ {{ end }}
+</article>
+{{ end }}
diff --git a/layouts/partials/home/skills.html b/layouts/partials/home/skills.html
new file mode 100644
index 0000000..35bda7c
--- /dev/null
+++ b/layouts/partials/home/skills.html
@@ -0,0 +1,11 @@
+<article class="skills">
+ <h2 class="skills__header section-header">Skills</h2>
+ <dl class="skills__content">
+ {{ range $skill := . }}
+ {{ range $title, $content := $skill }}
+ <dt class="skills__title">{{ $title }}</dt>
+ <dd class="skills__items">{{ $content }}</dd>
+ {{ end }}
+ {{ end }}
+ </dl>
+</article>
diff --git a/layouts/partials/home/summary.html b/layouts/partials/home/summary.html
new file mode 100644
index 0000000..4f256fd
--- /dev/null
+++ b/layouts/partials/home/summary.html
@@ -0,0 +1,6 @@
+<article class="summary">
+ <h2 class="summary__header section-header">Summary</h2>
+ <p class="summary__content">
+ {{ . }}
+ </p>
+</article>
diff --git a/layouts/partials/home/work.html b/layouts/partials/home/work.html
new file mode 100644
index 0000000..4af88dc
--- /dev/null
+++ b/layouts/partials/home/work.html
@@ -0,0 +1,20 @@
+<article class="work">
+ <h2 class="work__header section-header">Work Experience</h2>
+ {{ range . }}
+ <article class="work__experience">
+ <div class="job-position">
+ <h2 class="job-position__company">{{ .Company | safeHTML }}</h2>
+ <em class="job-position__title">{{ .Title }}</em>
+ <em class="job-position__duration">{{ .Duration }}</em>
+ <em class="job-position__location">{{ .Location }}</em>
+ </div>
+ <p class="note">{{ .Note | safeHTML }}</p>
+ <ul class="tasks">
+ {{ range .Tasks }}
+ <li>{{ . | safeHTML }}</li>
+ {{ end }}
+ </ul>
+ <p class="note">{{ .FootNote | safeHTML }}</p>
+ </article>
+ {{ end }}
+</article>
diff --git a/package.json b/package.json
deleted file mode 100644
index a774502..0000000
--- a/package.json
+++ /dev/null
@@ -1,22 +0,0 @@
-{
- "name": "A14M",
- "description": "Website/CV",
- "version": "1.0.0",
- "private": false,
- "engines": {
- "node": ">= 12",
- "yarn": "^1.16.0"
- },
- "scripts": {
- "start": "brunch watch --server",
- "build": "brunch build --production"
- },
- "dependencies": {},
- "devDependencies": {
- "auto-reload-brunch": "^2",
- "brunch": "^4",
- "clean-css-brunch": "^3.0.0",
- "stylus-brunch": "^3",
- "terser-brunch": "^4"
- }
-}
diff --git a/static/.keep b/static/.keep
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/static/.keep
diff --git a/app/assets/key.asc b/static/gpg.key
index 9ff0781..855c21b 100644
--- a/app/assets/key.asc
+++ b/static/gpg.key
@@ -1,3 +1,18 @@
+<html lang="en">
+<head>
+ <meta charset="utf-8" />
+ <title>A14M</title>
+ <link rel="shortcut icon" href="/ico/favicon.ico" />
+ <link rel="apple-touch-icon" sizes="180x180" href="/ico/apple-touch-icon.png" />
+ <link rel="icon" type="image/png" sizes="32x32" href="/ico/favicon-32x32.png" />
+ <link rel="icon" type="image/png" sizes="16x16" href="/ico/favicon-16x16.png" />
+ <link rel="manifest" href="/ico/site.webmanifest" />
+ <link rel="mask-icon" href="/ico/safari-pinned-tab.svg" color="#000" />
+ <meta name="msapplication-TileColor" content="#da532c" />
+ <meta name="theme-color" content="#ffffff" />
+</head>
+<body>
+<pre>
-----BEGIN PGP PUBLIC KEY BLOCK-----
mDMEZBDEPxYJKwYBBAHaRw8BAQdAMQDR6x4wOUF/16fEy0A+f4K0YkFYwLrKH7f6
@@ -18,3 +33,6 @@ ZAUFAmQQxI8CGyAACgkQ2f3SneHqZAWinAEAnmvc20NnEnzo+ex6d3LFknv4W0nt
RFPfX3ptbzOHJ8YA/jUYRLKGHekJRrJM7kE+ihUFXS3sNpU7KOQthW0DpgwH
=pdo1
-----END PGP PUBLIC KEY BLOCK-----
+</pre>
+</body>
+</html>
diff --git a/app/assets/android-chrome-192x192.png b/static/ico/android-chrome-192x192.png
index 0abde99..0abde99 100644
--- a/app/assets/android-chrome-192x192.png
+++ b/static/ico/android-chrome-192x192.png
Binary files differ
diff --git a/app/assets/apple-touch-icon.png b/static/ico/apple-touch-icon.png
index 56687f2..56687f2 100644
--- a/app/assets/apple-touch-icon.png
+++ b/static/ico/apple-touch-icon.png
Binary files differ
diff --git a/app/assets/browserconfig.xml b/static/ico/browserconfig.xml
index b3930d0..b3930d0 100644
--- a/app/assets/browserconfig.xml
+++ b/static/ico/browserconfig.xml
diff --git a/app/assets/favicon-16x16.png b/static/ico/favicon-16x16.png
index fdf8171..fdf8171 100644
--- a/app/assets/favicon-16x16.png
+++ b/static/ico/favicon-16x16.png
Binary files differ
diff --git a/app/assets/favicon-32x32.png b/static/ico/favicon-32x32.png
index a321a58..a321a58 100644
--- a/app/assets/favicon-32x32.png
+++ b/static/ico/favicon-32x32.png
Binary files differ
diff --git a/app/assets/favicon.ico b/static/ico/favicon.ico
index a81b32b..a81b32b 100644
--- a/app/assets/favicon.ico
+++ b/static/ico/favicon.ico
Binary files differ
diff --git a/app/assets/mstile-150x150.png b/static/ico/mstile-150x150.png
index 350bca4..350bca4 100644
--- a/app/assets/mstile-150x150.png
+++ b/static/ico/mstile-150x150.png
Binary files differ
diff --git a/app/assets/safari-pinned-tab.svg b/static/ico/safari-pinned-tab.svg
index be8fc4f..be8fc4f 100644
--- a/app/assets/safari-pinned-tab.svg
+++ b/static/ico/safari-pinned-tab.svg
diff --git a/app/assets/site.webmanifest b/static/ico/site.webmanifest
index e532fa7..e532fa7 100644
--- a/app/assets/site.webmanifest
+++ b/static/ico/site.webmanifest
diff --git a/themes/.keep b/themes/.keep
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/themes/.keep
diff --git a/yarn.lock b/yarn.lock
deleted file mode 100644
index 27dd3fd..0000000
--- a/yarn.lock
+++ /dev/null
@@ -1,1296 +0,0 @@
-# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY.
-# yarn lockfile v1
-
-
-acorn-node@^1.6.1:
- version "1.8.2"
- resolved "https://registry.yarnpkg.com/acorn-node/-/acorn-node-1.8.2.tgz#114c95d64539e53dede23de8b9d96df7c7ae2af8"
- integrity sha512-8mt+fslDufLYntIoPAaIMUe/lrbrehIiwmR3t2k9LljIzoigEPF27eLk2hy8zSGzmR/ogr7zbRKINMo1u0yh5A==
- dependencies:
- acorn "^7.0.0"
- acorn-walk "^7.0.0"
- xtend "^4.0.2"
-
-acorn-walk@^7.0.0:
- version "7.2.0"
- resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-7.2.0.tgz#0de889a601203909b0fbe07b8938dc21d2e967bc"
- integrity sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==
-
-acorn@^7.0.0:
- version "7.4.1"
- resolved "https://registry.yarnpkg.com/acorn/-/acorn-7.4.1.tgz#feaed255973d2e77555b83dbc08851a6c63520fa"
- integrity sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==
-
-amdefine@>=0.0.4:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/amdefine/-/amdefine-1.0.1.tgz#4a5282ac164729e93619bcfd3ad151f817ce91f5"
- integrity sha1-SlKCrBZHKek2Gbz9OtFR+BfOkfU=
-
-ansi-regex@^2.0.0:
- version "2.1.1"
- resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df"
- integrity sha1-w7M6te42DYbg5ijwRorn7yfWVN8=
-
-ansi-styles@^2.2.1:
- version "2.2.1"
- resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-2.2.1.tgz#b432dd3358b634cf75e1e4664368240533c1ddbe"
- integrity sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=
-
-ansi-styles@^3.2.1:
- version "3.2.1"
- resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d"
- integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==
- dependencies:
- color-convert "^1.9.0"
-
- version "1.3.0"
- resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-1.3.0.tgz#a3e52fa39168c825ff57b0248126ce5a8ff95507"
- integrity sha1-o+Uvo5FoyCX/V7AkgSbOWo/5VQc=
- dependencies:
- arrify "^1.0.0"
- micromatch "^2.1.5"
-
-anymatch@^3, anymatch@^3.0.0, anymatch@^3.1.1, anymatch@~3.1.2:
- version "3.1.2"
- resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.2.tgz#c0557c096af32f106198f4f4e2a383537e378716"
- integrity sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==
- dependencies:
- normalize-path "^3.0.0"
- picomatch "^2.0.4"
-
-anysort@^2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/anysort/-/anysort-2.0.0.tgz#b91e7a820eab1996481cb370824d132f168ff835"
- integrity sha512-Vo6WEVULAOb5LraoA+6STmR5kr4CsCL4w3Jt8WMdSDH3N9LLpzjIcLnFE2cXZ4v50reshxM4DO/Y16ZHphHxWw==
- dependencies:
- anymatch "^3"
-
-arr-diff@^2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/arr-diff/-/arr-diff-2.0.0.tgz#8f3b827f955a8bd669697e4a4256ac3ceae356cf"
- integrity sha1-jzuCf5Vai9ZpaX5KQlasPOrjVs8=
- dependencies:
- arr-flatten "^1.0.1"
-
-arr-flatten@^1.0.1:
- version "1.1.0"
- resolved "https://registry.yarnpkg.com/arr-flatten/-/arr-flatten-1.1.0.tgz#36048bbff4e7b47e136644316c99669ea5ae91f1"
- integrity sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==
-
-array-unique@^0.2.1:
- version "0.2.1"
- resolved "https://registry.yarnpkg.com/array-unique/-/array-unique-0.2.1.tgz#a1d97ccafcbc2625cc70fadceb36a50c58b01a53"
- integrity sha1-odl8yvy8JiXMcPrc6zalDFiwGlM=
-
-arrify@^1.0.0:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/arrify/-/arrify-1.0.1.tgz#898508da2226f380df904728456849c1501a4b0d"
- integrity sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0=
-
-async-each@^1.0.0, async-each@^1.0.3:
- version "1.0.3"
- resolved "https://registry.yarnpkg.com/async-each/-/async-each-1.0.3.tgz#b727dbf87d7651602f06f4d4ac387f47d91b0cbf"
- integrity sha512-z/WhQ5FPySLdvREByI2vZiTWwCnF0moMJ1hK9YQwDTHKh6I7/uSckMetoRGb5UBZPC1z0jlw+n/XCgjeH7y1AQ==
-
-atob@^2.1.2:
- version "2.1.2"
- resolved "https://registry.yarnpkg.com/atob/-/atob-2.1.2.tgz#6d9517eb9e030d2436666651e86bd9f6f13533c9"
- integrity sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==
-
-auto-reload-brunch@^2:
- version "2.7.1"
- resolved "https://registry.yarnpkg.com/auto-reload-brunch/-/auto-reload-brunch-2.7.1.tgz#6924cec0ac61128d1cd1ff8f2f9ba0f6e7f01bfe"
- integrity sha1-aSTOwKxhEo0c0f+PL5ug9ufwG/4=
- dependencies:
- anymatch "1.3.0"
- ws "~1.1.0"
-
-balanced-match@^1.0.0:
- version "1.0.2"
- resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee"
- integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==
-
-big.js@^3.1.3:
- version "3.2.0"
- resolved "https://registry.yarnpkg.com/big.js/-/big.js-3.2.0.tgz#a5fc298b81b9e0dca2e458824784b65c52ba588e"
- integrity sha512-+hN/Zh2D08Mx65pZ/4g5bsmNiZUuChDiQfTUQ7qJr4/kuopCr88xZsAXv6mBoZEsUI4OuGHlX59qE94K2mMW8Q==
-
-binary-extensions@^2.0.0:
- version "2.2.0"
- resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.2.0.tgz#75f502eeaf9ffde42fc98829645be4ea76bd9e2d"
- integrity sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==
-
-brace-expansion@^1.1.7:
- version "1.1.11"
- resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd"
- integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==
- dependencies:
- balanced-match "^1.0.0"
- concat-map "0.0.1"
-
-braces@^1.8.2:
- version "1.8.5"
- resolved "https://registry.yarnpkg.com/braces/-/braces-1.8.5.tgz#ba77962e12dff969d6b76711e914b737857bf6a7"
- integrity sha1-uneWLhLf+WnWt2cR6RS3N4V79qc=
- dependencies:
- expand-range "^1.8.1"
- preserve "^0.2.0"
- repeat-element "^1.1.2"
-
-braces@~3.0.2:
- version "3.0.2"
- resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107"
- integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==
- dependencies:
- fill-range "^7.0.1"
-
-browser-resolve@^1.11.1:
- version "1.11.3"
- resolved "https://registry.yarnpkg.com/browser-resolve/-/browser-resolve-1.11.3.tgz#9b7cbb3d0f510e4cb86bdbd796124d28b5890af6"
- integrity sha512-exDi1BYWB/6raKHmDTCicQfTkqwN5fioMFV4j8BsfMU4R2DK/QfZfK7kOVkmWCNANf0snkBzqGqAJBao9gZMdQ==
- dependencies:
- resolve "1.1.7"
-
-brunch-skeletons@^0.2.0:
- version "0.2.0"
- resolved "https://registry.yarnpkg.com/brunch-skeletons/-/brunch-skeletons-0.2.0.tgz#0005de9ba32235bbc7da38ba8ec6412ece4197a1"
- integrity sha512-+ywd1mCqyTBjx0ENEC918IhLnV2gaUMkAU49ioIrKcLdt9cT77OvpWDtSwuKcSo3BDhbGYo2Bx1c10qoEtd7Iw==
-
-brunch@^4:
- version "4.0.1"
- resolved "https://registry.yarnpkg.com/brunch/-/brunch-4.0.1.tgz#01dc916eca72f6785d05c004d5f9d0bb57cda59a"
- integrity sha512-ldbvYscNwZpIvdUOM/ByUcEmDdkkvUpbpsPTmWkf159xdBbBkII45Q0utlK54kvBdniH8hwcUMISYWI/9fSNRQ==
- dependencies:
- anymatch "^3.1.1"
- anysort "^2.0.0"
- brunch-skeletons "^0.2.0"
- chokidar "^3.5.1"
- commander "~5.0.0"
- commonjs-require-definition "^0.6.3"
- debug "^4.1.1"
- deppack "^0.10.0"
- deps-install "~0.2.1"
- fcache "~0.3"
- hosted-git-info "5.0.0"
- loggy "~1.0.8"
- ncp "^2.0.0"
- normalize-git-url "^3.0.2"
- serve-handler "^6.1.3"
- since-app-start "~0.3.3"
- skemata "~0.1.2"
- source-map "~0.5"
- universal-path "^0.1.0"
-
-buffer-from@^1.0.0:
- version "1.1.1"
- resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.1.tgz#32713bc028f75c02fdb710d7c7bcec1f2c6070ef"
- integrity sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==
-
- version "3.0.0"
- resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.0.0.tgz#d32815404d689699f85a4ea4fa8755dd13a96048"
- integrity sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg=
-
-cbify@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/cbify/-/cbify-1.0.0.tgz#1a7ad4044b2f92317e7a1badda3a727607835d84"
- integrity sha1-GnrUBEsvkjF+ehut2jpydgeDXYQ=
- dependencies:
- fn-args "^1.0.0"
- wrappy "^1.0.1"
-
-chalk@^1.1.3:
- version "1.1.3"
- resolved "https://registry.yarnpkg.com/chalk/-/chalk-1.1.3.tgz#a8115c55e4a702fe4d150abd3872822a7e09fc98"
- integrity sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=
- dependencies:
- ansi-styles "^2.2.1"
- escape-string-regexp "^1.0.2"
- has-ansi "^2.0.0"
- strip-ansi "^3.0.0"
- supports-color "^2.0.0"
-
-chalk@^2.4.1, chalk@^2.4.2:
- version "2.4.2"
- resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424"
- integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==
- dependencies:
- ansi-styles "^3.2.1"
- escape-string-regexp "^1.0.5"
- supports-color "^5.3.0"
-
-chokidar@^3.5.1:
- version "3.5.3"
- resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.5.3.tgz#1cf37c8707b932bd1af1ae22c0432e2acd1903bd"
- integrity sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==
- dependencies:
- anymatch "~3.1.2"
- braces "~3.0.2"
- glob-parent "~5.1.2"
- is-binary-path "~2.1.0"
- is-glob "~4.0.1"
- normalize-path "~3.0.0"
- readdirp "~3.6.0"
- optionalDependencies:
- fsevents "~2.3.2"
-
-clean-css-brunch@^3.0.0:
- version "3.0.0"
- resolved "https://registry.yarnpkg.com/clean-css-brunch/-/clean-css-brunch-3.0.0.tgz#0b6c40543cad6fcef61bf32e9292ce9394dd5d0b"
- integrity sha512-gbkVut0IXCyMjOMETb2pbe+klsMB4WAebWmeA39G9479D4CJN7+4ggF+MpdSordHm/DWKywzgC7IvJVkPW0kRA==
- dependencies:
- clean-css "~4.2"
-
-clean-css@~4.2:
- version "4.2.3"
- resolved "https://registry.yarnpkg.com/clean-css/-/clean-css-4.2.3.tgz#507b5de7d97b48ee53d84adb0160ff6216380f78"
- integrity sha512-VcMWDN54ZN/DS+g58HYL5/n4Zrqe8vHJpGA8KdgUXFU4fuP/aHNw8eld9SyEIyabIMJX/0RaY/fplOo5hYLSFA==
- dependencies:
- source-map "~0.6.0"
-
-color-convert@^1.9.0:
- version "1.9.3"
- resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8"
- integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==
- dependencies:
- color-name "1.1.3"
-
- version "1.1.3"
- resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25"
- integrity sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=
-
-colorette@~1.1:
- version "1.1.0"
- resolved "https://registry.yarnpkg.com/colorette/-/colorette-1.1.0.tgz#1f943e5a357fac10b4e0f5aaef3b14cdc1af6ec7"
- integrity sha512-6S062WDQUXi6hOfkO/sBPVwE5ASXY4G2+b4atvhJfSsuUUhIaUKlkjLe9692Ipyt5/a+IPF5aVTu3V5gvXq5cg==
-
-commander@^2.20.0:
- version "2.20.3"
- resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33"
- integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==
-
-commander@~5.0.0:
- version "5.0.0"
- resolved "https://registry.yarnpkg.com/commander/-/commander-5.0.0.tgz#dbf1909b49e5044f8fdaf0adc809f0c0722bdfd0"
- integrity sha512-JrDGPAKjMGSP1G0DUoaceEJ3DZgAfr/q6X7FVk4+U5KxUSKviYGM2k6zWkfyyBHy5rAtzgYJFa1ro2O9PtoxwQ==
-
-commonjs-require-definition@^0.6.3:
- version "0.6.3"
- resolved "https://registry.yarnpkg.com/commonjs-require-definition/-/commonjs-require-definition-0.6.3.tgz#3145cff979bf5809480358f0133021ee8b119cc3"
- integrity sha512-zBIo1YrBat66dXiTeXPNAsh8YfbTxwpOVP71bmjDhQciJoq8hv9eA9fG0fLDD/f9EZbsJkNq6V42Y+fdhaal4Q==
-
- version "0.0.1"
- resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b"
- integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=
-
- version "0.5.2"
- resolved "https://registry.yarnpkg.com/content-disposition/-/content-disposition-0.5.2.tgz#0cf68bb9ddf5f2be7961c3a85178cb85dba78cb4"
- integrity sha1-DPaLud318r55YcOoUXjLhdunjLQ=
-
-css-modules-loader-core@^1.1.0:
- version "1.1.0"
- resolved "https://registry.yarnpkg.com/css-modules-loader-core/-/css-modules-loader-core-1.1.0.tgz#5908668294a1becd261ae0a4ce21b0b551f21d16"
- integrity sha1-WQhmgpShvs0mGuCkziGwtVHyHRY=
- dependencies:
- icss-replace-symbols "1.1.0"
- postcss "6.0.1"
- postcss-modules-extract-imports "1.1.0"
- postcss-modules-local-by-default "1.2.0"
- postcss-modules-scope "1.1.0"
- postcss-modules-values "1.3.0"
-
- version "1.7.0"
- resolved "https://registry.yarnpkg.com/css-parse/-/css-parse-1.7.0.tgz#321f6cf73782a6ff751111390fc05e2c657d8c9b"
- integrity sha1-Mh9s9zeCpv91ERE5D8BeLGV9jJs=
-
-css-parse@~2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/css-parse/-/css-parse-2.0.0.tgz#a468ee667c16d81ccf05c58c38d2a97c780dbfd4"
- integrity sha1-pGjuZnwW2BzPBcWMONKpfHgNv9Q=
- dependencies:
- css "^2.0.0"
-
-css-selector-tokenizer@^0.7.0:
- version "0.7.3"
- resolved "https://registry.yarnpkg.com/css-selector-tokenizer/-/css-selector-tokenizer-0.7.3.tgz#735f26186e67c749aaf275783405cf0661fae8f1"
- integrity sha512-jWQv3oCEL5kMErj4wRnK/OPoBi0D+P1FR2cDCKYPaMeD2eW3/mttav8HT4hT1CKopiJI/psEULjkClhvJo4Lvg==
- dependencies:
- cssesc "^3.0.0"
- fastparse "^1.1.2"
-
-css@^2.0.0:
- version "2.2.4"
- resolved "https://registry.yarnpkg.com/css/-/css-2.2.4.tgz#c646755c73971f2bba6a601e2cf2fd71b1298929"
- integrity sha512-oUnjmWpy0niI3x/mPL8dVEI1l7MnG3+HHyRPHf+YFSbK+svOhXpmSOcDURUh2aOCgl2grzrOPt1nHLuCVFULLw==
- dependencies:
- inherits "^2.0.3"
- source-map "^0.6.1"
- source-map-resolve "^0.5.2"
- urix "^0.1.0"
-
-cssesc@^3.0.0:
- version "3.0.0"
- resolved "https://registry.yarnpkg.com/cssesc/-/cssesc-3.0.0.tgz#37741919903b868565e1c09ea747445cd18983ee"
- integrity sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==
-
-debug@*, debug@^4.1.1:
- version "4.3.1"
- resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.1.tgz#f0d229c505e0c6d8c49ac553d1b13dc183f6b2ee"
- integrity sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==
- dependencies:
- ms "2.1.2"
-
-debug@~3.1.0:
- version "3.1.0"
- resolved "https://registry.yarnpkg.com/debug/-/debug-3.1.0.tgz#5bb5a0672628b64149566ba16819e61518c67261"
- integrity sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==
- dependencies:
- ms "2.0.0"
-
-decode-uri-component@^0.2.0:
- version "0.2.0"
- resolved "https://registry.yarnpkg.com/decode-uri-component/-/decode-uri-component-0.2.0.tgz#eb3913333458775cb84cd1a1fae062106bb87545"
- integrity sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=
-
-deep-assign@^2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/deep-assign/-/deep-assign-2.0.0.tgz#ebe06b1f07f08dae597620e3dd1622f371a1c572"
- integrity sha1-6+BrHwfwja5ZdiDj3RYi83GhxXI=
- dependencies:
- is-obj "^1.0.0"
-
-defined@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/defined/-/defined-1.0.0.tgz#c98d9bcef75674188e110969151199e39b1fa693"
- integrity sha1-yY2bzvdWdBiOEQlpFRGZ45sfppM=
-
-deppack@^0.10.0:
- version "0.10.0"
- resolved "https://registry.yarnpkg.com/deppack/-/deppack-0.10.0.tgz#87437850ff9c9e97cc8e70846377e77499a0f517"
- integrity sha512-R0F7zPCx4t8Ft5XlLSH5zbtMyB+XQf0Mp/7SamviKOhYBBnFJQhINzPIhtWSS+BFQxHrZI9sN/Z7awl+4gsPvA==
- dependencies:
- anymatch "^3.0.0"
- async-each "^1.0.3"
- browser-resolve "^1.11.1"
- deep-assign "^2.0.0"
- detective "^5.2.0"
- glob "^7.1.5"
- loggy "^1.0.8"
- "true-case-path" "^1.0.2"
-
-deps-install@~0.2.1:
- version "0.2.1"
- resolved "https://registry.yarnpkg.com/deps-install/-/deps-install-0.2.1.tgz#fb2a2784fc4fd995a2be136d2d8a855be04ef429"
- integrity sha512-jTTRh/r+pszOjEOioL/qTGCQkRBlqjxuhS7H2MjpSqZvpM10ZlJ005D04NZyq8UxsA82LxZX83k5wz6hzS6zYw==
- dependencies:
- readdirp "^3.2.0"
- semver "^6.3.0"
-
-detective@^5.2.0:
- version "5.2.0"
- resolved "https://registry.yarnpkg.com/detective/-/detective-5.2.0.tgz#feb2a77e85b904ecdea459ad897cc90a99bd2a7b"
- integrity sha512-6SsIx+nUUbuK0EthKjv0zrdnajCCXVYGmbYYiYjFVpzcjwEs/JMDZ8tPRG29J/HhN56t3GJp2cGSWDRjjot8Pg==
- dependencies:
- acorn-node "^1.6.1"
- defined "^1.0.0"
- minimist "^1.1.1"
-
-emojis-list@^2.0.0:
- version "2.1.0"
- resolved "https://registry.yarnpkg.com/emojis-list/-/emojis-list-2.1.0.tgz#4daa4d9db00f9819880c79fa457ae5b09a1fd389"
- integrity sha1-TapNnbAPmBmIDHn6RXrlsJof04k=
-
-escape-string-regexp@^1.0.2, escape-string-regexp@^1.0.5:
- version "1.0.5"
- resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4"
- integrity sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=
-
-expand-brackets@^0.1.4:
- version "0.1.5"
- resolved "https://registry.yarnpkg.com/expand-brackets/-/expand-brackets-0.1.5.tgz#df07284e342a807cd733ac5af72411e581d1177b"
- integrity sha1-3wcoTjQqgHzXM6xa9yQR5YHRF3s=
- dependencies:
- is-posix-bracket "^0.1.0"
-
-expand-range@^1.8.1:
- version "1.8.2"
- resolved "https://registry.yarnpkg.com/expand-range/-/expand-range-1.8.2.tgz#a299effd335fe2721ebae8e257ec79644fc85337"
- integrity sha1-opnv/TNf4nIeuujiV+x5ZE/IUzc=
- dependencies:
- fill-range "^2.1.0"
-
-extglob@^0.3.1:
- version "0.3.2"
- resolved "https://registry.yarnpkg.com/extglob/-/extglob-0.3.2.tgz#2e18ff3d2f49ab2765cec9023f011daa8d8349a1"
- integrity sha1-Lhj/PS9JqydlzskCPwEdqo2DSaE=
- dependencies:
- is-extglob "^1.0.0"
-
-fast-levenshtein@^1.1.3:
- version "1.1.4"
- resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-1.1.4.tgz#e6a754cc8f15e58987aa9cbd27af66fd6f4e5af9"
- integrity sha1-5qdUzI8V5YmHqpy9J69m/W9OWvk=
-
- version "1.1.3"
- resolved "https://registry.yarnpkg.com/fast-url-parser/-/fast-url-parser-1.1.3.tgz#f4af3ea9f34d8a271cf58ad2b3759f431f0b318d"
- integrity sha1-9K8+qfNNiicc9YrSs3WfQx8LMY0=
- dependencies:
- punycode "^1.3.2"
-
-fastparse@^1.1.2:
- version "1.1.2"
- resolved "https://registry.yarnpkg.com/fastparse/-/fastparse-1.1.2.tgz#91728c5a5942eced8531283c79441ee4122c35a9"
- integrity sha512-483XLLxTVIwWK3QTrMGRqUfUpoOs/0hbQrl2oz4J0pAcm3A3bu84wxTFqGqkJzewCLdME38xJLJAxBABfQT8sQ==
-
-fcache@~0.3:
- version "0.3.0"
- resolved "https://registry.yarnpkg.com/fcache/-/fcache-0.3.0.tgz#d45f2f908642b91b798e88195ec47881a51c3d44"
- integrity sha1-1F8vkIZCuRt5jogZXsR4gaUcPUQ=
-
-filename-regex@^2.0.0:
- version "2.0.1"
- resolved "https://registry.yarnpkg.com/filename-regex/-/filename-regex-2.0.1.tgz#c1c4b9bee3e09725ddb106b75c1e301fe2f18b26"
- integrity sha1-wcS5vuPglyXdsQa3XB4wH+LxiyY=
-
-fill-range@^2.1.0:
- version "2.2.4"
- resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-2.2.4.tgz#eb1e773abb056dcd8df2bfdf6af59b8b3a936565"
- integrity sha512-cnrcCbj01+j2gTG921VZPnHbjmdAf8oQV/iGeV2kZxGSyfYjjTyY79ErsK1WJWMpw6DaApEX72binqJE+/d+5Q==
- dependencies:
- is-number "^2.1.0"
- isobject "^2.0.0"
- randomatic "^3.0.0"
- repeat-element "^1.1.2"
- repeat-string "^1.5.2"
-
-fill-range@^7.0.1:
- version "7.0.1"
- resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40"
- integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==
- dependencies:
- to-regex-range "^5.0.1"
-
-fn-args@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/fn-args/-/fn-args-1.0.0.tgz#974dafa1aeac4ac7c21fa09cc3b80f650106ed32"
- integrity sha1-l02voa6sSsfCH6Ccw7gPZQEG7TI=
-
-for-in@^1.0.1:
- version "1.0.2"
- resolved "https://registry.yarnpkg.com/for-in/-/for-in-1.0.2.tgz#81068d295a8142ec0ac726c6e2200c30fb6d5e80"
- integrity sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=
-
-for-own@^0.1.4:
- version "0.1.5"
- resolved "https://registry.yarnpkg.com/for-own/-/for-own-0.1.5.tgz#5265c681a4f294dabbf17c9509b6763aa84510ce"
- integrity sha1-UmXGgaTylNq78XyVCbZ2OqhFEM4=
- dependencies:
- for-in "^1.0.1"
-
-fs-mode@^1.0.1:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/fs-mode/-/fs-mode-1.0.1.tgz#73102f40aa1a25221dda0eaa906616d6da08255a"
- integrity sha1-cxAvQKoaJSId2g6qkGYW1toIJVo=
- dependencies:
- cbify "^1.0.0"
-
-fs.realpath@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f"
- integrity sha1-FQStJSMVjKpA20onh8sBQRmU6k8=
-
-fsevents@~2.3.2:
- version "2.3.2"
- resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.2.tgz#8a526f78b8fdf4623b709e0b975c52c24c02fd1a"
- integrity sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==
-
-generic-names@^1.0.3:
- version "1.0.3"
- resolved "https://registry.yarnpkg.com/generic-names/-/generic-names-1.0.3.tgz#2d786a121aee508876796939e8e3bff836c20917"
- integrity sha1-LXhqEhruUIh2eWk56OO/+DbCCRc=
- dependencies:
- loader-utils "^0.2.16"
-
-glob-base@^0.3.0:
- version "0.3.0"
- resolved "https://registry.yarnpkg.com/glob-base/-/glob-base-0.3.0.tgz#dbb164f6221b1c0b1ccf82aea328b497df0ea3c4"
- integrity sha1-27Fk9iIbHAscz4Kuoyi0l98Oo8Q=
- dependencies:
- glob-parent "^2.0.0"
- is-glob "^2.0.0"
-
-glob-parent@^2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-2.0.0.tgz#81383d72db054fcccf5336daa902f182f6edbb28"
- integrity sha1-gTg9ctsFT8zPUzbaqQLxgvbtuyg=
- dependencies:
- is-glob "^2.0.0"
-
-glob-parent@~5.1.2:
- version "5.1.2"
- resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4"
- integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==
- dependencies:
- is-glob "^4.0.1"
-
- version "7.0.6"
- resolved "https://registry.yarnpkg.com/glob/-/glob-7.0.6.tgz#211bafaf49e525b8cd93260d14ab136152b3f57a"
- integrity sha1-IRuvr0nlJbjNkyYNFKsTYVKz9Xo=
- dependencies:
- fs.realpath "^1.0.0"
- inflight "^1.0.4"
- inherits "2"
- minimatch "^3.0.2"
- once "^1.3.0"
- path-is-absolute "^1.0.0"
-
-glob@^7.0.3, glob@^7.1.2, glob@^7.1.5, glob@^7.1.6:
- version "7.1.6"
- resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.6.tgz#141f33b81a7c2492e125594307480c46679278a6"
- integrity sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==
- dependencies:
- fs.realpath "^1.0.0"
- inflight "^1.0.4"
- inherits "2"
- minimatch "^3.0.4"
- once "^1.3.0"
- path-is-absolute "^1.0.0"
-
-has-ansi@^2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/has-ansi/-/has-ansi-2.0.0.tgz#34f5049ce1ecdf2b0649af3ef24e45ed35416d91"
- integrity sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=
- dependencies:
- ansi-regex "^2.0.0"
-
-has-flag@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-1.0.0.tgz#9d9e793165ce017a00f00418c43f942a7b1d11fa"
- integrity sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=
-
-has-flag@^3.0.0:
- version "3.0.0"
- resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd"
- integrity sha1-tdRU3CGZriJWmfNGfloH87lVuv0=
-
- version "5.0.0"
- resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-5.0.0.tgz#df7a06678b4ebd722139786303db80fdf302ea56"
- integrity sha512-rRnjWu0Bxj+nIfUOkz0695C0H6tRrN5iYIzYejb0tDEefe2AekHu/U5Kn9pEie5vsJqpNQU02az7TGSH3qpz4Q==
- dependencies:
- lru-cache "^7.5.1"
-
[email protected], icss-replace-symbols@^1.1.0:
- version "1.1.0"
- resolved "https://registry.yarnpkg.com/icss-replace-symbols/-/icss-replace-symbols-1.1.0.tgz#06ea6f83679a7749e386cfe1fe812ae5db223ded"
- integrity sha1-Bupvg2ead0njhs/h/oEq5dsiPe0=
-
-inflight@^1.0.4:
- version "1.0.6"
- resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9"
- integrity sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=
- dependencies:
- once "^1.3.0"
- wrappy "1"
-
-inherits@2, inherits@^2.0.3:
- version "2.0.4"
- resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c"
- integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==
-
-is-binary-path@~2.1.0:
- version "2.1.0"
- resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-2.1.0.tgz#ea1f7f3b80f064236e83470f86c09c254fb45b09"
- integrity sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==
- dependencies:
- binary-extensions "^2.0.0"
-
-is-buffer@^1.1.5:
- version "1.1.6"
- resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be"
- integrity sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==
-
-is-dotfile@^1.0.0:
- version "1.0.3"
- resolved "https://registry.yarnpkg.com/is-dotfile/-/is-dotfile-1.0.3.tgz#a6a2f32ffd2dfb04f5ca25ecd0f6b83cf798a1e1"
- integrity sha1-pqLzL/0t+wT1yiXs0Pa4PPeYoeE=
-
-is-equal-shallow@^0.1.3:
- version "0.1.3"
- resolved "https://registry.yarnpkg.com/is-equal-shallow/-/is-equal-shallow-0.1.3.tgz#2238098fc221de0bcfa5d9eac4c45d638aa1c534"
- integrity sha1-IjgJj8Ih3gvPpdnqxMRdY4qhxTQ=
- dependencies:
- is-primitive "^2.0.0"
-
-is-extendable@^0.1.1:
- version "0.1.1"
- resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-0.1.1.tgz#62b110e289a471418e3ec36a617d472e301dfc89"
- integrity sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=
-
-is-extglob@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-1.0.0.tgz#ac468177c4943405a092fc8f29760c6ffc6206c0"
- integrity sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=
-
-is-extglob@^2.1.1:
- version "2.1.1"
- resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2"
- integrity sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=
-
-is-glob@^2.0.0, is-glob@^2.0.1:
- version "2.0.1"
- resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-2.0.1.tgz#d096f926a3ded5600f3fdfd91198cb0888c2d863"
- integrity sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=
- dependencies:
- is-extglob "^1.0.0"
-
-is-glob@^4.0.1, is-glob@~4.0.1:
- version "4.0.1"
- resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.1.tgz#7567dbe9f2f5e2467bc77ab83c4a29482407a5dc"
- integrity sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==
- dependencies:
- is-extglob "^2.1.1"
-
-is-number@^2.1.0:
- version "2.1.0"
- resolved "https://registry.yarnpkg.com/is-number/-/is-number-2.1.0.tgz#01fcbbb393463a548f2f466cce16dece49db908f"
- integrity sha1-Afy7s5NGOlSPL0ZszhbezknbkI8=
- dependencies:
- kind-of "^3.0.2"
-
-is-number@^4.0.0:
- version "4.0.0"
- resolved "https://registry.yarnpkg.com/is-number/-/is-number-4.0.0.tgz#0026e37f5454d73e356dfe6564699867c6a7f0ff"
- integrity sha512-rSklcAIlf1OmFdyAqbnWTLVelsQ58uvZ66S/ZyawjWqIviTWCjg2PzVGw8WUA+nNuPTqb4wgA+NszrJ+08LlgQ==
-
-is-number@^7.0.0:
- version "7.0.0"
- resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b"
- integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==
-
-is-obj@^1.0.0:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/is-obj/-/is-obj-1.0.1.tgz#3e4729ac1f5fde025cd7d83a896dab9f4f67db0f"
- integrity sha1-PkcprB9f3gJc19g6iW2rn09n2w8=
-
-is-posix-bracket@^0.1.0:
- version "0.1.1"
- resolved "https://registry.yarnpkg.com/is-posix-bracket/-/is-posix-bracket-0.1.1.tgz#3334dc79774368e92f016e6fbc0a88f5cd6e6bc4"
- integrity sha1-MzTceXdDaOkvAW5vvAqI9c1ua8Q=
-
-is-primitive@^2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/is-primitive/-/is-primitive-2.0.0.tgz#207bab91638499c07b2adf240a41a87210034575"
- integrity sha1-IHurkWOEmcB7Kt8kCkGochADRXU=
-
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11"
- integrity sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=
-
-isobject@^2.0.0:
- version "2.1.0"
- resolved "https://registry.yarnpkg.com/isobject/-/isobject-2.1.0.tgz#f065561096a3f1da2ef46272f815c840d87e0c89"
- integrity sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=
- dependencies:
- isarray "1.0.0"
-
-json5@^0.5.0:
- version "0.5.1"
- resolved "https://registry.yarnpkg.com/json5/-/json5-0.5.1.tgz#1eade7acc012034ad84e2396767ead9fa5495821"
- integrity sha1-Hq3nrMASA0rYTiOWdn6tn6VJWCE=
-
-kind-of@^3.0.2:
- version "3.2.2"
- resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-3.2.2.tgz#31ea21a734bab9bbb0f32466d893aea51e4a3c64"
- integrity sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=
- dependencies:
- is-buffer "^1.1.5"
-
-kind-of@^6.0.0:
- version "6.0.3"
- resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-6.0.3.tgz#07c05034a6c349fa06e24fa35aa76db4580ce4dd"
- integrity sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==
-
-loader-utils@^0.2.16:
- version "0.2.17"
- resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-0.2.17.tgz#f86e6374d43205a6e6c60e9196f17c0299bfb348"
- integrity sha1-+G5jdNQyBabmxg6RlvF8Apm/s0g=
- dependencies:
- big.js "^3.1.3"
- emojis-list "^2.0.0"
- json5 "^0.5.0"
- object-assign "^4.0.1"
-
-lodash.camelcase@^4.3.0:
- version "4.3.0"
- resolved "https://registry.yarnpkg.com/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz#b28aa6288a2b9fc651035c7711f65ab6190331a6"
- integrity sha1-soqmKIorn8ZRA1x3EfZathkDMaY=
-
-loggy@^1.0.8, loggy@~1.0.8:
- version "1.0.8"
- resolved "https://registry.yarnpkg.com/loggy/-/loggy-1.0.8.tgz#82b3717b85d9d23090dd0367acfc2abc5fa6e4fb"
- integrity sha512-3gXR0rOS4fnxVXGeiQID95/IML//jSbKx5T1GatifpzpOwDoOsTtlt25gosiBq27Mn4YnbzWB/DsKncnaLWKSg==
- dependencies:
- colorette "~1.1"
- native-notifier "~0.1.6"
-
-lru-cache@^7.5.1:
- version "7.14.1"
- resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-7.14.1.tgz#8da8d2f5f59827edb388e63e459ac23d6d408fea"
- integrity sha512-ysxwsnTKdAx96aTRdhDOCQfDgbHnt8SK0KY8SEjO0wHinhWOFTESbjVCMPbU1uGXg/ch4lifqx0wfjOawU2+WA==
-
-math-random@^1.0.1:
- version "1.0.4"
- resolved "https://registry.yarnpkg.com/math-random/-/math-random-1.0.4.tgz#5dd6943c938548267016d4e34f057583080c514c"
- integrity sha512-rUxjysqif/BZQH2yhd5Aaq7vXMSx9NdEsQcyA07uEzIvxgI7zIr33gGsh+RU0/XjmQpCW7RsVof1vlkvQVCK5A==
-
-micromatch@^2.1.5:
- version "2.3.11"
- resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-2.3.11.tgz#86677c97d1720b363431d04d0d15293bd38c1565"
- integrity sha1-hmd8l9FyCzY0MdBNDRUpO9OMFWU=
- dependencies:
- arr-diff "^2.0.0"
- array-unique "^0.2.1"
- braces "^1.8.2"
- expand-brackets "^0.1.4"
- extglob "^0.3.1"
- filename-regex "^2.0.0"
- is-extglob "^1.0.0"
- is-glob "^2.0.1"
- kind-of "^3.0.2"
- normalize-path "^2.0.1"
- object.omit "^2.0.0"
- parse-glob "^3.0.4"
- regex-cache "^0.4.2"
-
-mime-db@~1.33.0:
- version "1.33.0"
- resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.33.0.tgz#a3492050a5cb9b63450541e39d9788d2272783db"
- integrity sha512-BHJ/EKruNIqJf/QahvxwQZXKygOQ256myeN/Ew+THcAa5q+PjyTTMMeNQC4DZw5AwfvelsUrA6B67NKMqXDbzQ==
-
- version "2.1.18"
- resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.18.tgz#6f323f60a83d11146f831ff11fd66e2fe5503bb8"
- integrity sha512-lc/aahn+t4/SWV/qcmumYjymLsWfN3ELhpmVuUFjgsORruuZPVSwAQryq+HHGvO/SI2KVX26bx+En+zhM8g8hQ==
- dependencies:
- mime-db "~1.33.0"
-
- version "3.1.2"
- resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b"
- integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==
- dependencies:
- brace-expansion "^1.1.7"
-
-minimatch@^3.0.2, minimatch@^3.0.4:
- version "3.0.4"
- resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083"
- integrity sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==
- dependencies:
- brace-expansion "^1.1.7"
-
-minimist@^1.1.1, minimist@^1.2.5:
- version "1.2.5"
- resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.5.tgz#67d66014b66a6a8aaa0c083c5fd58df4e4e97602"
- integrity sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==
-
- version "0.5.5"
- resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.5.tgz#d91cefd62d1436ca0f41620e251288d420099def"
- integrity sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==
- dependencies:
- minimist "^1.2.5"
-
-mkdirp@~1.0.4:
- version "1.0.4"
- resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-1.0.4.tgz#3eb5ed62622756d79a5f0e2a221dfebad75c2f7e"
- integrity sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==
-
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8"
- integrity sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=
-
- version "2.1.2"
- resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009"
- integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==
-
-native-notifier@~0.1.6:
- version "0.1.6"
- resolved "https://registry.yarnpkg.com/native-notifier/-/native-notifier-0.1.6.tgz#d98c306b28b327591a74f9819dac143c8e4bcd1d"
- integrity sha512-BwRtjqhNsS2HpeVrNmERzQqZTFxR+MoJr/RdfCwZ0ODKyc/0EcHQhwnPwZr99gT1uHgRqbDk3C5fOo70TVYlcQ==
- dependencies:
- tag-shell "~0.1.0"
-
-ncp@^2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/ncp/-/ncp-2.0.0.tgz#195a21d6c46e361d2fb1281ba38b91e9df7bdbb3"
- integrity sha1-GVoh1sRuNh0vsSgbo4uR6d9727M=
-
-nib@~1.1.2:
- version "1.1.2"
- resolved "https://registry.yarnpkg.com/nib/-/nib-1.1.2.tgz#6a69ede4081b95c0def8be024a4c8ae0c2cbb6c7"
- integrity sha1-amnt5AgblcDe+L4CSkyK4MLLtsc=
- dependencies:
- stylus "0.54.5"
-
-normalize-git-url@^3.0.2:
- version "3.0.2"
- resolved "https://registry.yarnpkg.com/normalize-git-url/-/normalize-git-url-3.0.2.tgz#8e5f14be0bdaedb73e07200310aa416c27350fc4"
- integrity sha1-jl8Uvgva7bc+ByADEKpBbCc1D8Q=
-
-normalize-path@^2.0.1:
- version "2.1.1"
- resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-2.1.1.tgz#1ab28b556e198363a8c1a6f7e6fa20137fe6aed9"
- integrity sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=
- dependencies:
- remove-trailing-separator "^1.0.1"
-
-normalize-path@^3.0.0, normalize-path@~3.0.0:
- version "3.0.0"
- resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65"
- integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==
-
-object-assign@^4.0.1:
- version "4.1.1"
- resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863"
- integrity sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=
-
-object.omit@^2.0.0:
- version "2.0.1"
- resolved "https://registry.yarnpkg.com/object.omit/-/object.omit-2.0.1.tgz#1a9c744829f39dbb858c76ca3579ae2a54ebd1fa"
- integrity sha1-Gpx0SCnznbuFjHbKNXmuKlTr0fo=
- dependencies:
- for-own "^0.1.4"
- is-extendable "^0.1.1"
-
-once@^1.3.0:
- version "1.4.0"
- resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1"
- integrity sha1-WDsap3WWHUsROsF9nFC6753Xa9E=
- dependencies:
- wrappy "1"
-
-options@>=0.0.5:
- version "0.0.6"
- resolved "https://registry.yarnpkg.com/options/-/options-0.0.6.tgz#ec22d312806bb53e731773e7cdaefcf1c643128f"
- integrity sha1-7CLTEoBrtT5zF3Pnza788cZDEo8=
-
-parse-glob@^3.0.4:
- version "3.0.4"
- resolved "https://registry.yarnpkg.com/parse-glob/-/parse-glob-3.0.4.tgz#b2c376cfb11f35513badd173ef0bb6e3a388391c"
- integrity sha1-ssN2z7EfNVE7rdFz7wu246OIORw=
- dependencies:
- glob-base "^0.3.0"
- is-dotfile "^1.0.0"
- is-extglob "^1.0.0"
- is-glob "^2.0.0"
-
-path-is-absolute@^1.0.0:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f"
- integrity sha1-F0uSaHNVNP+8es5r9TpanhtcX18=
-
- version "1.0.2"
- resolved "https://registry.yarnpkg.com/path-is-inside/-/path-is-inside-1.0.2.tgz#365417dede44430d1c11af61027facf074bdfc53"
- integrity sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM=
-
- version "2.2.1"
- resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-2.2.1.tgz#90b617025a16381a879bc82a38d4e8bdeb2bcf45"
- integrity sha512-gu9bD6Ta5bwGrrU8muHzVOBFFREpp2iRkVfhBJahwJ6p6Xw20SjT0MxLnwkjOibQmGSYhiUnf2FLe7k+jcFmGQ==
-
-picomatch@^2.0.4, picomatch@^2.2.1:
- version "2.2.3"
- resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.2.3.tgz#465547f359ccc206d3c48e46a1bcb89bf7ee619d"
- integrity sha512-KpELjfwcCDUb9PeigTs2mBJzXUPzAuP2oPcA989He8Rte0+YUAjw1JVedDhuTKPkHjSYzMN3npC9luThGYEKdg==
-
- version "1.1.0"
- resolved "https://registry.yarnpkg.com/postcss-modules-extract-imports/-/postcss-modules-extract-imports-1.1.0.tgz#b614c9720be6816eaee35fb3a5faa1dba6a05ddb"
- integrity sha1-thTJcgvmgW6u41+zpfqh26agXds=
- dependencies:
- postcss "^6.0.1"
-
- version "1.2.0"
- resolved "https://registry.yarnpkg.com/postcss-modules-local-by-default/-/postcss-modules-local-by-default-1.2.0.tgz#f7d80c398c5a393fa7964466bd19500a7d61c069"
- integrity sha1-99gMOYxaOT+nlkRmvRlQCn1hwGk=
- dependencies:
- css-selector-tokenizer "^0.7.0"
- postcss "^6.0.1"
-
- version "1.1.0"
- resolved "https://registry.yarnpkg.com/postcss-modules-scope/-/postcss-modules-scope-1.1.0.tgz#d6ea64994c79f97b62a72b426fbe6056a194bb90"
- integrity sha1-1upkmUx5+XtipytCb75gVqGUu5A=
- dependencies:
- css-selector-tokenizer "^0.7.0"
- postcss "^6.0.1"
-
- version "1.3.0"
- resolved "https://registry.yarnpkg.com/postcss-modules-values/-/postcss-modules-values-1.3.0.tgz#ecffa9d7e192518389f42ad0e83f72aec456ea20"
- integrity sha1-7P+p1+GSUYOJ9CrQ6D9yrsRW6iA=
- dependencies:
- icss-replace-symbols "^1.1.0"
- postcss "^6.0.1"
-
-postcss-modules@~1.4.1:
- version "1.4.1"
- resolved "https://registry.yarnpkg.com/postcss-modules/-/postcss-modules-1.4.1.tgz#8aa35bd3461db67e27377a7ce770d77b654a84ef"
- integrity sha512-btTrbK+Xc3NBuYF8TPBjCMRSp5h6NoQ1iVZ6WiDQENIze6KIYCSf0+UFQuV3yJ7gRHA+4AAtF8i2jRvUpbBMMg==
- dependencies:
- css-modules-loader-core "^1.1.0"
- generic-names "^1.0.3"
- lodash.camelcase "^4.3.0"
- postcss "^7.0.1"
- string-hash "^1.1.1"
-
- version "6.0.1"
- resolved "https://registry.yarnpkg.com/postcss/-/postcss-6.0.1.tgz#000dbd1f8eef217aa368b9a212c5fc40b2a8f3f2"
- integrity sha1-AA29H47vIXqjaLmiEsX8QLKo8/I=
- dependencies:
- chalk "^1.1.3"
- source-map "^0.5.6"
- supports-color "^3.2.3"
-
-postcss@^6.0.1:
- version "6.0.23"
- resolved "https://registry.yarnpkg.com/postcss/-/postcss-6.0.23.tgz#61c82cc328ac60e677645f979054eb98bc0e3324"
- integrity sha512-soOk1h6J3VMTZtVeVpv15/Hpdl2cBLX3CAw4TAbkpTJiNPk9YP/zWcD1ND+xEtvyuuvKzbxliTOIyvkSeSJ6ag==
- dependencies:
- chalk "^2.4.1"
- source-map "^0.6.1"
- supports-color "^5.4.0"
-
-postcss@^7.0.1, postcss@~7.0.24:
- version "7.0.35"
- resolved "https://registry.yarnpkg.com/postcss/-/postcss-7.0.35.tgz#d2be00b998f7f211d8a276974079f2e92b970e24"
- integrity sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==
- dependencies:
- chalk "^2.4.2"
- source-map "^0.6.1"
- supports-color "^6.1.0"
-
-preserve@^0.2.0:
- version "0.2.0"
- resolved "https://registry.yarnpkg.com/preserve/-/preserve-0.2.0.tgz#815ed1f6ebc65926f865b310c0713bcb3315ce4b"
- integrity sha1-gV7R9uvGWSb4ZbMQwHE7yzMVzks=
-
-progeny@~0.12.0:
- version "0.12.0"
- resolved "https://registry.yarnpkg.com/progeny/-/progeny-0.12.0.tgz#4a4c85031a00f723b580b5929932b57d587d66d2"
- integrity sha512-n5rRHPP2Pxeh1fL385XNTlgyYrTm8MzG+kXO3G87+vmLU5MHouzrF4D5TRKPNfCwpE4/GOwmCS4XSzCPC7hEoA==
- dependencies:
- async-each "^1.0.0"
- chalk "^1.1.3"
- fs-mode "^1.0.1"
- glob "^7.0.3"
-
-punycode@^1.3.2:
- version "1.4.1"
- resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.4.1.tgz#c0d5a63b2718800ad8e1eb0fa5269c84dd41845e"
- integrity sha1-wNWmOycYgArY4esPpSachN1BhF4=
-
-randomatic@^3.0.0:
- version "3.1.1"
- resolved "https://registry.yarnpkg.com/randomatic/-/randomatic-3.1.1.tgz#b776efc59375984e36c537b2f51a1f0aff0da1ed"
- integrity sha512-TuDE5KxZ0J461RVjrJZCJc+J+zCkTb1MbH9AQUq68sMhOMcy9jLcb3BrZKgp9q9Ncltdg4QVqWrH02W2EFFVYw==
- dependencies:
- is-number "^4.0.0"
- kind-of "^6.0.0"
- math-random "^1.0.1"
-
- version "1.2.0"
- resolved "https://registry.yarnpkg.com/range-parser/-/range-parser-1.2.0.tgz#f49be6b487894ddc40dcc94a322f611092e00d5e"
- integrity sha1-9JvmtIeJTdxA3MlKMi9hEJLgDV4=
-
-readdirp@^3.2.0, readdirp@~3.6.0:
- version "3.6.0"
- resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.6.0.tgz#74a370bd857116e245b29cc97340cd431a02a6c7"
- integrity sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==
- dependencies:
- picomatch "^2.2.1"
-
-regex-cache@^0.4.2:
- version "0.4.4"
- resolved "https://registry.yarnpkg.com/regex-cache/-/regex-cache-0.4.4.tgz#75bdc58a2a1496cec48a12835bc54c8d562336dd"
- integrity sha512-nVIZwtCjkC9YgvWkpM55B5rBhBYRZhAaJbgcFYXXsHnbZ9UZI9nnVWYZpBlCqv9ho2eZryPnWrZGsOdPwVWXWQ==
- dependencies:
- is-equal-shallow "^0.1.3"
-
-remove-trailing-separator@^1.0.1:
- version "1.1.0"
- resolved "https://registry.yarnpkg.com/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz#c24bce2a283adad5bc3f58e0d48249b92379d8ef"
- integrity sha1-wkvOKig62tW8P1jg1IJJuSN52O8=
-
-repeat-element@^1.1.2:
- version "1.1.4"
- resolved "https://registry.yarnpkg.com/repeat-element/-/repeat-element-1.1.4.tgz#be681520847ab58c7568ac75fbfad28ed42d39e9"
- integrity sha512-LFiNfRcSu7KK3evMyYOuCzv3L10TW7yC1G2/+StMjK8Y6Vqd2MG7r/Qjw4ghtuCOjFvlnms/iMmLqpvW/ES/WQ==
-
-repeat-string@^1.5.2:
- version "1.6.1"
- resolved "https://registry.yarnpkg.com/repeat-string/-/repeat-string-1.6.1.tgz#8dcae470e1c88abc2d600fff4a776286da75e637"
- integrity sha1-jcrkcOHIirwtYA//Sndihtp15jc=
-
-resolve-url@^0.2.1:
- version "0.2.1"
- resolved "https://registry.yarnpkg.com/resolve-url/-/resolve-url-0.2.1.tgz#2c637fe77c893afd2a663fe21aa9080068e2052a"
- integrity sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=
-
- version "1.1.7"
- resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.1.7.tgz#203114d82ad2c5ed9e8e0411b3932875e889e97b"
- integrity sha1-IDEU2CrSxe2ejgQRs5ModeiJ6Xs=
-
-safer-buffer@^2.1.2:
- version "2.1.2"
- resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a"
- integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==
-
- version "0.5.8"
- resolved "https://registry.yarnpkg.com/sax/-/sax-0.5.8.tgz#d472db228eb331c2506b0e8c15524adb939d12c1"
- integrity sha1-1HLbIo6zMcJQaw6MFVJK25OdEsE=
-
-sax@~1.2.4:
- version "1.2.4"
- resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9"
- integrity sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==
-
-semver@^6.3.0:
- version "6.3.0"
- resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d"
- integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==
-
-serve-handler@^6.1.3:
- version "6.1.5"
- resolved "https://registry.yarnpkg.com/serve-handler/-/serve-handler-6.1.5.tgz#a4a0964f5c55c7e37a02a633232b6f0d6f068375"
- integrity sha512-ijPFle6Hwe8zfmBxJdE+5fta53fdIY0lHISJvuikXB3VYFafRjMRpOffSPvCYsbKyBA7pvy9oYr/BT1O3EArlg==
- dependencies:
- bytes "3.0.0"
- content-disposition "0.5.2"
- fast-url-parser "1.1.3"
- mime-types "2.1.18"
- minimatch "3.1.2"
- path-is-inside "1.0.2"
- path-to-regexp "2.2.1"
- range-parser "1.2.0"
-
-since-app-start@~0.3.3:
- version "0.3.3"
- resolved "https://registry.yarnpkg.com/since-app-start/-/since-app-start-0.3.3.tgz#ff96d7ab0a60118283785640396ea861bfe8554c"
- integrity sha512-CvVjdZvSgaUP4mMOLn8NZtYKFF2RYboEaTBKdj5F+Jm6SpCQ/kZgnMVMNHhOUgBzHusBe8aio0Gri8ci2utOXw==
- dependencies:
- debug "~3.1.0"
-
-skemata@~0.1.2:
- version "0.1.2"
- resolved "https://registry.yarnpkg.com/skemata/-/skemata-0.1.2.tgz#f3c521029b67be6e0825f0df867ee97916de4530"
- integrity sha1-88UhAptnvm4IJfDfhn7peRbeRTA=
- dependencies:
- fast-levenshtein "^1.1.3"
-
-source-map-resolve@^0.5.2:
- version "0.5.3"
- resolved "https://registry.yarnpkg.com/source-map-resolve/-/source-map-resolve-0.5.3.tgz#190866bece7553e1f8f267a2ee82c606b5509a1a"
- integrity sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw==
- dependencies:
- atob "^2.1.2"
- decode-uri-component "^0.2.0"
- resolve-url "^0.2.1"
- source-map-url "^0.4.0"
- urix "^0.1.0"
-
-source-map-support@~0.5.12:
- version "0.5.19"
- resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.19.tgz#a98b62f86dcaf4f67399648c085291ab9e8fed61"
- integrity sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw==
- dependencies:
- buffer-from "^1.0.0"
- source-map "^0.6.0"
-
-source-map-url@^0.4.0:
- version "0.4.1"
- resolved "https://registry.yarnpkg.com/source-map-url/-/source-map-url-0.4.1.tgz#0af66605a745a5a2f91cf1bbf8a7afbc283dec56"
- integrity sha512-cPiFOTLUKvJFIg4SKVScy4ilPPW6rFgMgfuZJPNoDuMs3nC1HbMUycBoJw77xFIp6z1UJQJOfx6C9GMH80DiTw==
-
- version "0.1.43"
- resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.1.43.tgz#c24bc146ca517c1471f5dacbe2571b2b7f9e3346"
- integrity sha1-wkvBRspRfBRx9drL4lcbK3+eM0Y=
- dependencies:
- amdefine ">=0.0.4"
-
-source-map@^0.5.6, source-map@~0.5:
- version "0.5.7"
- resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc"
- integrity sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=
-
-source-map@^0.6.0, source-map@^0.6.1, source-map@~0.6.0, source-map@~0.6.1:
- version "0.6.1"
- resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263"
- integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==
-
-source-map@^0.7.3:
- version "0.7.3"
- resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.7.3.tgz#5302f8169031735226544092e64981f751750383"
- integrity sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==
-
-string-hash@^1.1.1:
- version "1.1.3"
- resolved "https://registry.yarnpkg.com/string-hash/-/string-hash-1.1.3.tgz#e8aafc0ac1855b4666929ed7dd1275df5d6c811b"
- integrity sha1-6Kr8CsGFW0Zmkp7X3RJ1311sgRs=
-
-strip-ansi@^3.0.0:
- version "3.0.1"
- resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf"
- integrity sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=
- dependencies:
- ansi-regex "^2.0.0"
-
-stylus-brunch@^3:
- version "3.0.0"
- resolved "https://registry.yarnpkg.com/stylus-brunch/-/stylus-brunch-3.0.0.tgz#4c31f5d1a56cdbf43899d8ce052ab78ada9aa17a"
- integrity sha512-TG78EtdU8GDQuJBDDam+EUjwXkSNdB8r+CC5slWJNkq5mBnMjRgFu7pESyNpqDtqNfa6prcUcEAGQkLhUi9gVQ==
- dependencies:
- nib "~1.1.2"
- postcss "~7.0.24"
- postcss-modules "~1.4.1"
- progeny "~0.12.0"
- stylus "~0.54.7"
-
- version "0.54.5"
- resolved "https://registry.yarnpkg.com/stylus/-/stylus-0.54.5.tgz#42b9560931ca7090ce8515a798ba9e6aa3d6dc79"
- integrity sha1-QrlWCTHKcJDOhRWnmLqeaqPW3Hk=
- dependencies:
- css-parse "1.7.x"
- debug "*"
- glob "7.0.x"
- mkdirp "0.5.x"
- sax "0.5.x"
- source-map "0.1.x"
-
-stylus@~0.54.7:
- version "0.54.8"
- resolved "https://registry.yarnpkg.com/stylus/-/stylus-0.54.8.tgz#3da3e65966bc567a7b044bfe0eece653e099d147"
- integrity sha512-vr54Or4BZ7pJafo2mpf0ZcwA74rpuYCZbxrHBsH8kbcXOwSfvBFwsRfpGO5OD5fhG5HDCFW737PKaawI7OqEAg==
- dependencies:
- css-parse "~2.0.0"
- debug "~3.1.0"
- glob "^7.1.6"
- mkdirp "~1.0.4"
- safer-buffer "^2.1.2"
- sax "~1.2.4"
- semver "^6.3.0"
- source-map "^0.7.3"
-
-supports-color@^2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-2.0.0.tgz#535d045ce6b6363fa40117084629995e9df324c7"
- integrity sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=
-
-supports-color@^3.2.3:
- version "3.2.3"
- resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-3.2.3.tgz#65ac0504b3954171d8a64946b2ae3cbb8a5f54f6"
- integrity sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=
- dependencies:
- has-flag "^1.0.0"
-
-supports-color@^5.3.0, supports-color@^5.4.0:
- version "5.5.0"
- resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f"
- integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==
- dependencies:
- has-flag "^3.0.0"
-
-supports-color@^6.1.0:
- version "6.1.0"
- resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-6.1.0.tgz#0764abc69c63d5ac842dd4867e8d025e880df8f3"
- integrity sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==
- dependencies:
- has-flag "^3.0.0"
-
-tag-shell@~0.1.0:
- version "0.1.0"
- resolved "https://registry.yarnpkg.com/tag-shell/-/tag-shell-0.1.0.tgz#e743816e6a6e805ac3735f4162e016b97a7ddfbd"
- integrity sha1-50OBbmpugFrDc19BYuAWuXp9370=
-
-terser-brunch@^4:
- version "4.0.0"
- resolved "https://registry.yarnpkg.com/terser-brunch/-/terser-brunch-4.0.0.tgz#40633faff5958c00579a7e9478737f0e68034c61"
- integrity sha512-bmT9+/7HHwmgCbfZ0IaX26em9d2SpyoxSiiO+xSHJU4EG0FLsk52M7bRcTF/xMaSPl9LXTVkqjgSEllFmcoUFg==
- dependencies:
- anymatch "^3"
- terser "^4.4"
-
-terser@^4.4:
- version "4.8.0"
- resolved "https://registry.yarnpkg.com/terser/-/terser-4.8.0.tgz#63056343d7c70bb29f3af665865a46fe03a0df17"
- integrity sha512-EAPipTNeWsb/3wLPeup1tVPaXfIaU68xMnVdPafIL1TV05OhASArYyIfFvnvJCNrR2NIOvDVNNTFRa+Re2MWyw==
- dependencies:
- commander "^2.20.0"
- source-map "~0.6.1"
- source-map-support "~0.5.12"
-
-to-regex-range@^5.0.1:
- version "5.0.1"
- resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4"
- integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==
- dependencies:
- is-number "^7.0.0"
-
-"true-case-path@^1.0.2":
- version "1.0.3"
- resolved "https://registry.yarnpkg.com/true-case-path/-/true-case-path-1.0.3.tgz#f813b5a8c86b40da59606722b144e3225799f47d"
- integrity sha512-m6s2OdQe5wgpFMC+pAJ+q9djG82O2jcHPOI6RNg1yy9rCYR+WD6Nbpl32fDpfC56nirdRy+opFa/Vk7HYhqaew==
- dependencies:
- glob "^7.1.2"
-
- version "1.0.2"
- resolved "https://registry.yarnpkg.com/ultron/-/ultron-1.0.2.tgz#ace116ab557cd197386a4e88f4685378c8b2e4fa"
- integrity sha1-rOEWq1V80Zc4ak6I9GhTeMiy5Po=
-
-universal-path@^0.1.0:
- version "0.1.0"
- resolved "https://registry.yarnpkg.com/universal-path/-/universal-path-0.1.0.tgz#0fca24c936ea3d2282013d143710c06687ed0677"
- integrity sha1-D8okyTbqPSKCAT0UNxDAZoftBnc=
-
-urix@^0.1.0:
- version "0.1.0"
- resolved "https://registry.yarnpkg.com/urix/-/urix-0.1.0.tgz#da937f7a62e21fec1fd18d49b35c2935067a6c72"
- integrity sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=
-
-wrappy@1, wrappy@^1.0.1:
- version "1.0.2"
- resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f"
- integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=
-
-ws@~1.1.0:
- version "1.1.5"
- resolved "https://registry.yarnpkg.com/ws/-/ws-1.1.5.tgz#cbd9e6e75e09fc5d2c90015f21f0c40875e0dd51"
- integrity sha512-o3KqipXNUdS7wpQzBHSe180lBGO60SoK0yVo3CYJgb2MkobuWuBX6dhkYP5ORCLd55y+SaflMOV5fqAB53ux4w==
- dependencies:
- options ">=0.0.5"
- ultron "1.0.x"
-
-xtend@^4.0.2:
- version "4.0.2"
- resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.2.tgz#bb72779f5fa465186b1f438f674fa347fdb5db54"
- integrity sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==