[
  {
    "path": ".eslintignore",
    "content": ".DS_Store\nnode_modules\n/build\n/.svelte-kit\n/package\n.env\n.env.*\n!.env.example\n\n# Ignore files for PNPM, NPM and YARN\npnpm-lock.yaml\npackage-lock.json\nyarn.lock\n"
  },
  {
    "path": ".eslintrc.cjs",
    "content": "module.exports = {\n  root: true,\n  extends: [\"eslint:recommended\", \"prettier\"],\n  plugins: [\"svelte3\"],\n  overrides: [{files: [\"*.svelte\"], processor: \"svelte3/svelte3\"}],\n  parserOptions: {\n    sourceType: \"module\",\n    ecmaVersion: 2020,\n  },\n  env: {\n    browser: true,\n    es2017: true,\n    node: true,\n  },\n  rules: {\n    indent: [\"error\", 2],\n    \"linebreak-style\": [\"error\", \"unix\"],\n    quotes: [\"error\", \"double\"],\n    semi: [\"error\", \"always\"],\n  },\n};\n"
  },
  {
    "path": ".gitignore",
    "content": ".DS_Store\nnode_modules\n/build\n/.svelte-kit\n/package\n.env\n.env.*\n!.env.example\nvite.config.js.timestamp-*\nvite.config.ts.timestamp-*\n.idea\nplaywright-report\ntest-results"
  },
  {
    "path": ".husky/.gitignore",
    "content": "_\n"
  },
  {
    "path": ".husky/pre-commit",
    "content": "#!/usr/bin/env sh\n. \"$(dirname -- \"$0\")/_/husky.sh\"\n\nnpx lint-staged\n"
  },
  {
    "path": ".npmrc",
    "content": "engine-strict=true\n"
  },
  {
    "path": ".prettierignore",
    "content": ".DS_Store\nnode_modules\n/build\n/.svelte-kit\n/package\n.env\n.env.*\n!.env.example\n\n# Ignore files for PNPM, NPM and YARN\npnpm-lock.yaml\npackage-lock.json\nyarn.lock\n"
  },
  {
    "path": ".prettierrc",
    "content": "{\n  \"printWidth\": 80,\n  \"tabWidth\": 2,\n  \"useTabs\": false,\n  \"bracketSpacing\": false,\n  \"trailingComma\": \"all\",\n\n  \"plugins\": [\"prettier-plugin-svelte\"],\n  \"pluginSearchDirs\": [\".\"],\n  \"overrides\": [{\"files\": \"*.svelte\", \"options\": {\"parser\": \"svelte\"}}]\n}\n"
  },
  {
    "path": "LICENSE",
    "content": "MIT License\n\nCopyright (c) 2020 Riza Fahmi\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n"
  },
  {
    "path": "README.md",
    "content": "# Carikerja\n\n[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)\n\nDaftar developer keren yang terpaksa di PHK karena dampak pandemi COVID-19.\n\nYang diperlukan (versi minimum): [Node.js](https://nodejs.org) versi 16.\n\n```shell\ngit clone https://github.com/rizafahmi/carikerja.git\ncd carikerja/\nnpm install\nnpm run dev\n```\n\nlalu buka alamat `localhost:5173`.\n\nUntuk menambahkan data developer silakan ubah file `src/data/people.js`. Data social media dapat dibuat multi dengan mengupdate menjadi bentuk object, seperti contoh:\n\n```javascript\n    social_media: {\n        Linkedin : 'https://www.linkedin.com/in/foo/',\n        Github   : 'https://github.com/foo'\n    },\n```\n\ndan untuk menambahkan data perusahaan yang masih melakukan hiring silakan ubah file `src/data/employer.js`.\n"
  },
  {
    "path": "jsconfig.json",
    "content": "{\n  \"extends\": \"./.svelte-kit/tsconfig.json\",\n  \"compilerOptions\": {\n    \"allowJs\": true,\n    \"checkJs\": true,\n    \"esModuleInterop\": true,\n    \"forceConsistentCasingInFileNames\": true,\n    \"resolveJsonModule\": true,\n    \"skipLibCheck\": true,\n    \"sourceMap\": true,\n    \"strict\": true\n  }\n  // Path aliases are handled by https://kit.svelte.dev/docs/configuration#alias and https://kit.svelte.dev/docs/configuration#files\n  //\n  // If you want to overwrite includes/excludes, make sure to copy over the relevant includes/excludes\n  // from the referenced tsconfig.json - TypeScript does not merge them in\n}\n"
  },
  {
    "path": "package.json",
    "content": "{\n  \"name\": \"carikerja\",\n  \"description\": \"Menghubungkan para Software Engineer kece di tanah air yang terpaksa harus terkena pemutusan hubungan kerja karena pandemi COVID-19 dengan perusahaan yang sedang mencari talenta digital.\",\n  \"version\": \"0.0.1\",\n  \"scripts\": {\n    \"dev\": \"vite dev\",\n    \"build\": \"vite build\",\n    \"preview\": \"vite preview\",\n    \"check\": \"svelte-kit sync && svelte-check --tsconfig ./jsconfig.json\",\n    \"check:watch\": \"svelte-kit sync && svelte-check --tsconfig ./jsconfig.json --watch\",\n    \"test\": \"playwright test\",\n    \"test:unit\": \"vitest\",\n    \"lint\": \"prettier --plugin-search-dir . --check . && eslint .\",\n    \"format\": \"prettier --plugin-search-dir . --write .\",\n    \"postinstall\": \"husky install\"\n  },\n  \"devDependencies\": {\n    \"@playwright/test\": \"^1.30.0\",\n    \"@sveltejs/adapter-auto\": \"^1.0.0\",\n    \"@sveltejs/kit\": \"^1.8.3\",\n    \"eslint\": \"^8.28.0\",\n    \"eslint-config-prettier\": \"^8.5.0\",\n    \"eslint-plugin-svelte3\": \"^4.0.0\",\n    \"husky\": \"^8.0.2\",\n    \"lint-staged\": \"^13.0.4\",\n    \"prettier\": \"^2.8.0\",\n    \"prettier-plugin-svelte\": \"^2.8.1\",\n    \"svelte\": \"^3.54.0\",\n    \"svelte-check\": \"^2.9.2\",\n    \"svelte-select\": \"^4.4.7\",\n    \"terminal.css\": \"^0.7.2\",\n    \"typescript\": \"^4.9.3\",\n    \"vite\": \"^4.0.3\",\n    \"vitest\": \"^0.25.3\"\n  },\n  \"type\": \"module\",\n  \"lint-staged\": {\n    \"*.js\": [\n      \"npm run lint\",\n      \"npm run format\"\n    ]\n  }\n}\n"
  },
  {
    "path": "playwright.config.js",
    "content": "/** @type {import('@playwright/test').PlaywrightTestConfig} */\nconst config = {\n  webServer: {\n    command: \"npm run build && npm run preview\",\n    port: 4173,\n  },\n  testDir: \"tests\",\n  reporter: \"html\",\n  use: {\n    trace: \"retain-on-failure\",\n  },\n};\n\nexport default config;\n"
  },
  {
    "path": "src/app.css",
    "content": "body {\n  transition: 0.25s;\n}\n\nbody.dark-mode {\n  background-color: #111f31;\n  color: #ffffff;\n}\n\nbody.dark-mode h1,\nbody.dark-mode h4,\nbody.dark-mode strong {\n  color: #ffffff;\n}\n\nbody.dark-mode code {\n  background-color: #172f4e;\n  color: #ffffff;\n}\n\nbody.dark-mode .filter {\n  --itemColor: #151515;\n  --itemHoverColor: #151515;\n}\n\nbody.dark-mode .terminal-card {\n  border: 1px solid #1a2c44;\n}\n\nbody.dark-mode .terminal-card header {\n  background: #253e5f;\n}\n\nbody.dark-mode .button-switch-theme-dark {\n  background: #0d131f;\n  color: rgba(255, 255, 255, 0.85);\n}\n\nbody a[aria-current=\"page\"] {\n  color: #000 !important;\n}\n\nbody.dark-mode a[aria-current=\"page\"] {\n  color: #ffffff !important;\n}\n"
  },
  {
    "path": "src/app.d.ts",
    "content": "// See https://kit.svelte.dev/docs/types#app\n// for information about these interfaces\n// and what to do when importing types\ndeclare namespace App {\n  // interface Locals {}\n  // interface PageData {}\n  // interface Error {}\n  // interface Platform {}\n}\n"
  },
  {
    "path": "src/app.html",
    "content": "<!DOCTYPE html>\n<html lang=\"en\">\n  <head>\n    <meta charset=\"utf-8\" />\n    <link rel=\"icon\" href=\"%sveltekit.assets%/favicon.png\" />\n    <meta name=\"viewport\" content=\"width=device-width\" />\n\n    <meta name=\"theme-color\" content=\"#333333\" />\n\n    <meta\n      property=\"og:title\"\n      content=\"Daftar engineer keren yang terkena dampak pemutusan hubungan kerja karena pandemi.\"\n    />\n    <meta\n      property=\"og:description\"\n      content=\"Daftar yang berisikan beberapa software engineer kece di tanah air yang terpaksa harus terkena pemutusan hubungan kerja karena pandemi COVID-19. Tujuannya supaya bisa menghubungkan developer keren ini dengan beberapa perusahaan yang sedang mencari talenta digital.\"\n    />\n    <meta property=\"og:image\" content=\"%sveltekit.assets%/screenshot.png\" />\n    <meta property=\"og:url\" content=\"https://carikerja.deeptech.id\" />\n\n    <meta\n      name=\"twitter:title\"\n      content=\"Daftar engineer keren yang terkena dampak pemutusan hubungan kerja karena pandemi.\"\n    />\n    <meta\n      property=\"twitter:description\"\n      content=\"Daftar yang berisikan beberapa software engineer kece di tanah air yang terpaksa harus terkena pemutusan hubungan kerja karena pandemi COVID-19. Tujuannya supaya bisa menghubungkan developer keren ini dengan beberapa perusahaan yang sedang mencari talenta digital.\"\n    />\n    <meta name=\"twitter:image\" content=\"%sveltekit.assets%/screenshot.png\" />\n    <meta name=\"twitter:card\" content=\"summary_large_image\" />\n\n    %sveltekit.head%\n  </head>\n  <body>\n    <div style=\"display: contents\">%sveltekit.body%</div>\n  </body>\n</html>\n"
  },
  {
    "path": "src/components/Nav.svelte",
    "content": "<script>\n  import {page} from \"$app/stores\";\n  import {theme} from \"$src/stores/theme.js\";\n\n  $: segment = $page.url.pathname;\n  $: dark = $theme === \"Dark\";\n\n  function toggleTheme() {\n    // jika di localStorage tidak ada data tema maka ganti tema menjadi tema Gelap\n    const newTheme =\n      $theme === null ? \"Dark\" : $theme === \"Light\" ? \"Dark\" : \"Light\";\n    theme.set(newTheme);\n    localStorage.setItem(\"theme\", newTheme);\n  }\n</script>\n\n<nav class=\"terminal-nav\">\n  <header class=\"terminal-logo\">\n    <div class=\"terminal-prompt\">\n      <a href=\"/\" class=\"no-style\">Carikerja</a>\n    </div>\n  </header>\n  <div class=\"terminal-menu\">\n    <ul typeof=\"BreadcrumbList\">\n      <li>\n        <a aria-current={segment === \"about\" ? \"page\" : undefined} href=\"about\">\n          Tentang\n        </a>\n      </li>\n      <li>\n        <a\n          aria-current={segment === \"hiring\" ? \"page\" : undefined}\n          href=\"hiring\"\n        >\n          Hiring?\n        </a>\n      </li>\n      {#if $theme !== null}\n        <li>\n          <button on:click={toggleTheme} class=\"button-switch-theme\" class:dark>\n            {$theme === \"Dark\" ? \"🌜 \" + $theme : \"🌞 \" + $theme}\n          </button>\n        </li>\n      {/if}\n    </ul>\n  </div>\n</nav>\n\n<style>\n  .button-switch-theme {\n    padding: 0.25em;\n    padding-left: 0.5em;\n    padding-right: 0.5em;\n    border-width: 0;\n    border-radius: 1em;\n    display: inline-block;\n    background: #eee;\n    cursor: pointer;\n  }\n  .dark {\n    background: #162a44;\n    color: #fff;\n  }\n</style>\n"
  },
  {
    "path": "src/data/employer.js",
    "content": "/** @type {Employer[]} */\nexport default [];\n"
  },
  {
    "path": "src/data/people.js",
    "content": "/** @type {Person[]} */\nexport default [\n  {\n    name: \"M Abd Aziz Alfian\",\n    status: \"Remote\",\n    role: \"FullStack Developer\",\n    location: \"Jakarta\",\n    social_media: {\n      Linkedin: \"https://www.linkedin.com/in/azizalfian\",\n      Github: \"https://github.com/aalfiann\",\n      Linktree: \"https://linktr.ee/aalfiann\",\n    },\n    tech_stack: [\n      \"NodeJS\",\n      \"Fastify\",\n      \"Laravel\",\n      \"PostgreSQL\",\n      \"Sequelize\",\n      \"SvelteKit\",\n      \"ReactJS\",\n      \"ExpressJS\",\n      \"TotalJS\",\n      \"NextJS\",\n      \"NestJS\",\n      \"Docker\",\n      \"Mocha\",\n      \"JavaScript\",\n      \"PHP\",\n      \"MySQL\",\n      \"MongoDB\",\n      \"Redis\",\n      \"HTML\",\n      \"CSS3\",\n      \"TailwindCSS\",\n      \"Bulma\",\n      \"Bootstrap\",\n      \"TypeScript\",\n      \"C#\",\n      \"VB.NET\",\n      \"GCP\",\n      \"Framework7\",\n    ],\n    hired: false,\n  },\n  {\n    name: \"Nurizko Maulana\",\n    status: \"Fulltime, Remote\",\n    role: \"Software Engineer, \",\n    location: \"Batam\",\n    social_media: {\n      Linkedin: \"https://www.linkedin.com/in/nurizko-maulana\",\n      Github: \"https://github.com/nurizko-maulana\",\n      Blog: \"https://www.nurizkomaulana.site/about\",\n    },\n    tech_stack: [\"NodeJS\", \"Flutter\", \"React\", \"Laravel\", \"PostgreSQL\"],\n    hired: false,\n  },\n  {\n    name: \"Doddy Rizal Novianto\",\n    status: \"Fulltime, Remote\",\n    role: \"Frontend Developer\",\n    location: \"Jakarta, Tangerang\",\n    social_media: {\n      Linkedin: \"https://www.linkedin.com/in/doddy-rizal-novianto-559269157/\",\n      Github: \"https://github.com/drzaln\",\n    },\n    tech_stack: [\"react-native\", \"react\", \"javascript\"],\n    hired: false,\n  },\n  {\n    name: \"Tony Sanjaya\",\n    status: \"Fulltime, Remote\",\n    role: \"Fullstack Developer\",\n    location: \"Surabaya\",\n    social_media: {\n      Linkedin: \"https://www.linkedin.com/in/tony-sanjaya-11836042/\",\n      Github: \"https://github.com/sanjayatony\",\n    },\n    tech_stack: [\"WordPress\", \"PHP\", \"Tailwind CSS\", \"VueJS\", \"Shopify\"],\n    hired: false,\n  },\n  {\n    name: \"Rifki Andriyanto\",\n    status: \"Fulltime\",\n    role: \"Frontend Developer\",\n    location: \"Bogor\",\n    social_media: {\n      Linkedin: \"https://www.linkedin.com/in/andriyantorifki\",\n      Github: \"https://github.com/rifkiandriyanto\",\n    },\n    tech_stack: [\"react\", \"react native\", \"javascript\", \"css\", \"nodejs\"],\n    hired: false,\n  },\n  {\n    name: \"Ainul\",\n    status: \"Fulltime\",\n    role: \"Junior Mobile Developer\",\n    location: \"Surabaya\",\n    social_media: {\n      Linkedin: \"https://www.linkedin.com/in/ai-null/\",\n      Github: \"https://github.com/ai-null\",\n    },\n    tech_stack: [\"Kotlin\"],\n    hired: false,\n  },\n  {\n    name: \"Rikki Novar\",\n    status: \"Fulltime\",\n    role: \"Front-end Developer\",\n    location: \"Bandung\",\n    social_media: \"https://www.linkedin.com/in/rikkinovar/\",\n    tech_stack: [\"react\", \"react-native\"],\n    hired: false,\n  },\n  {\n    name: \"Willy Tan\",\n    status: \"Fulltime\",\n    role: \"Front-end Developer\",\n    location: \"Jakarta\",\n    social_media: \"https://www.linkedin.com/in/willy-tan-198814150/\",\n    tech_stack: [\"react\", \"react-native\"],\n    hired: false,\n  },\n  {\n    name: \"Natascha Meysarach Lamsu\",\n    status: \"Fulltime\",\n    role: \"Front-end Developer\",\n    location: \"Jakarta\",\n    social_media: \"https://www.linkedin.com/in/natascha-lamsu-445369167/\",\n    tech_stack: [\"react\"],\n    hired: false,\n  },\n  {\n    name: \"Hary Dewantoro\",\n    status: \"Fulltime\",\n    role: \"Software Quality Assurance\",\n    location: \"Jakarta\",\n    social_media: \"https://www.linkedin.com/in/hary-dewantoro-7bb00512a/\",\n    tech_stack: [],\n    hired: false,\n  },\n  {\n    name: \"Ari Rudiana\",\n    status: \"Fulltime, Remote\",\n    role: \"Jr. Full-Stack Developer\",\n    location: \"Depok\",\n    social_media: \"https://www.linkedin.com/in/ari-rudiana-260569192/\",\n    tech_stack: [\"vuejs\", \"laravel\"],\n    hired: false,\n  },\n  {\n    name: \"Hardyin Alexander Hutapea\",\n    status: \"Fulltime\",\n    role: \"Back-end Software Engineer\",\n    location: \"Jakarta\",\n    social_media: \"https://www.linkedin.com/in/hardlexander/\",\n    tech_stack: [\"golang\", \"mysql\", \"redis\", \"elasticsearch\"],\n    hired: false,\n  },\n  {\n    name: \"Muhammad Rizqi\",\n    status: \"Fulltime\",\n    role: \"Jr. Software Engineer\",\n    location: \"Jakarta\",\n    social_media: \"https://www.linkedin.com/in/muhrizqi/\",\n    tech_stack: [\"Python\", \"Odoo\", \"PostgreSQL\"],\n    hired: false,\n  },\n  {\n    name: \"Ilham Bintang\",\n    status: \"Fulltime\",\n    role: \"Machine Learning Engineer\",\n    location: \"Jakarta\",\n    social_media: {\n      Linkedin: \"https://www.linkedin.com/in/nullphantom/\",\n      Github: \"https://github.com/nullphantom\",\n      Blog: \"https://abin.web.id/\",\n    },\n    tech_stack: [\"Tensorflow\", \"Python\", \"Elasticsearch\"],\n    hired: false,\n  },\n  {\n    name: \"Zainal Arifin\",\n    status: \"Fulltime, Remote\",\n    role: \"Software Developer\",\n    location: \"Bandung\",\n    social_media: {\n      Linkedin: \"https://www.linkedin.com/in/zainalar/\",\n      Github: \"https://github.com/zainalarifinid\",\n    },\n    tech_stack: [\"JavaScript\", \"TypeScript\", \"NodeJS\", \"PHP\", \"VueJS\"],\n    hired: false,\n  },\n  {\n    name: \"Hasobi Roid Radityo\",\n    status: \"Fulltime, Remote\",\n    role: \"DevOps Engineer, Software Engineer\",\n    location: \"Surakarta\",\n    social_media: {\n      Linkedin: \"https://www.linkedin.com/in/hasobi/\",\n      Github: \"https://github.com/hasobi\",\n    },\n    tech_stack: [\"Python\", \"JavaScript\", \"Go\", \"Terraform\"],\n    hired: false,\n  },\n  {\n    name: \"Anton Purwanto\",\n    status: \"Fulltime, Remote\",\n    role: \"Java Developer, Software Engineer\",\n    location: \"Tangerang Selatan\",\n    social_media: {\n      Linkedin: \"https://www.linkedin.com/in/anton-purwanto-268a4050\",\n      Github: \"https://github.com/anteknik\",\n      AboutMe: \"https://about.me/antonpurwanto\",\n    },\n    tech_stack: [\n      \"Java\",\n      \"Spring Framework\",\n      \"Liferay\",\n      \"JPA/hibernate\",\n      \"JSF/JSP\",\n    ],\n    hired: false,\n  },\n  {\n    name: \"Panji Asmoro\",\n    status: \"Fulltime\",\n    role: \"Front End Developer\",\n    location: \"Depok\",\n    social_media: {\n      Linkedin: \"https://www.linkedin.com/in/panjiasmoro/\",\n      Github: \"https://github.com/panjiasmoroart\",\n    },\n    tech_stack: [\n      \"HTML5\",\n      \"CSS3\",\n      \"SASS\",\n      \"JavaScript\",\n      \"ReactJS\",\n      \"PHP\",\n      \"Ruby\",\n    ],\n    hired: false,\n  },\n  {\n    name: \"Ilham Bintang\",\n    status: \"Fulltime\",\n    role: \"Machine Learning Engineer\",\n    location: \"Jakarta\",\n    social_media: {\n      Linkedin: \"https://www.linkedin.com/in/nullphantom/\",\n      Github: \"https://github.com/nullphantom\",\n      Blog: \"https://abin.web.id/\",\n    },\n    tech_stack: [\"Tensorflow\", \"Python\", \"Elasticsearch\"],\n    hired: false,\n  },\n  {\n    name: \"Arian Saputra\",\n    status: \"Fulltime, Remote\",\n    role: \"Backend Developer\",\n    location: \"Mataram\",\n    social_media: {\n      Linkedin: \"https://www.linkedin.com/in/rhyanz46/\",\n      Github: \"https://github.com/Rhyanz46/\",\n      Website: \"https://ariansaputra.com/\",\n    },\n    tech_stack: [\"Flask\", \"Fastapi\", \"Mysql\", \"Redis\", \"Docker\"],\n    hired: false,\n  },\n  {\n    name: \"Zainal Arifin\",\n    status: \"Fulltime, Remote\",\n    role: \"Software Developer\",\n    location: \"Bandung\",\n    social_media: {\n      Linkedin: \"https://www.linkedin.com/in/zainalar/\",\n      Github: \"https://github.com/zainalarifinid\",\n    },\n    tech_stack: [\"JavaScript\", \"TypeScript\", \"NodeJS\", \"PHP\", \"VueJS\"],\n    hired: false,\n  },\n  {\n    name: \"Hasobi Roid Radityo\",\n    status: \"Fulltime, Remote\",\n    role: \"DevOps Engineer, Software Engineer\",\n    location: \"Surakarta\",\n    social_media: {\n      Linkedin: \"https://www.linkedin.com/in/hasobi/\",\n      Github: \"https://github.com/hasobi\",\n    },\n    tech_stack: [\"Python\", \"JavaScript\", \"Go\", \"Terraform\"],\n    hired: false,\n  },\n  {\n    name: \"Panji Asmoro\",\n    status: \"Fulltime\",\n    role: \"Front End Developer\",\n    location: \"Depok\",\n    social_media: {\n      Linkedin: \"https://www.linkedin.com/in/panjiasmoro/\",\n      Github: \"https://github.com/panjiasmoroart\",\n    },\n    tech_stack: [\n      \"HTML5\",\n      \"CSS3\",\n      \"SASS\",\n      \"JavaScript\",\n      \"ReactJS\",\n      \"PHP\",\n      \"Ruby\",\n    ],\n    hired: false,\n  },\n  {\n    name: \"Panji Asmoro\",\n    status: \"Fulltime\",\n    role: \"Front End Developer\",\n    location: \"Depok\",\n    social_media: {\n      Linkedin: \"https://www.linkedin.com/in/panjiasmoro/\",\n      Github: \"https://github.com/panjiasmoroart\",\n    },\n    tech_stack: [\n      \"HTML5\",\n      \"CSS3\",\n      \"SASS\",\n      \"JavaScript\",\n      \"ReactJS\",\n      \"PHP\",\n      \"Ruby\",\n    ],\n    hired: false,\n  },\n  {\n    name: \"Imam Riyadi\",\n    status: \"Fulltime, Remote\",\n    role: \"Software Developer\",\n    location: \"Jakarta\",\n    social_media: {\n      Linkedin: \"https://linkedin.com/in/imam-riyadi\",\n      Github: \"https://github.com/imamriyadi\",\n      Website: \"https://imamriyadi.com\",\n    },\n    tech_stack: [\"JavaScript\", \"SASS\", \"Java Android \", \"PHP\", \"C#\"],\n    hired: false,\n  },\n  {\n    name: \"Bambang Mohammad Azhari\",\n    status: \"Fulltime, Remote\",\n    role: \"Software Developer\",\n    location: \"Tasikmalaya\",\n    social_media: {\n      Linkedin: \"https://www.linkedin.com/in/bambang-m-azhari-5280a5192/\",\n      Github: \"https://github.com/illusi03\",\n      Website: \"https://azhari.my.id\",\n    },\n    tech_stack: [\"Typescript\", \"JavaScript\", \"PHP\", \"Laravel\", \"React\"],\n    hired: false,\n  },\n  {\n    name: \"Muhammad Luthfi Azzammi\",\n    status: \"Fulltime, Onsite\",\n    role: \"Software Developer\",\n    location: \"Bekasi\",\n    social_media: {\n      Linkedin: \"https://www.linkedin.com/in/azzammi/\",\n      Github: \"https://github.com/Azzammi\",\n      Website: \"https://azzammi.wordpress.com\",\n    },\n    tech_stack: [\"JavaScript\", \"PHP\", \"Laravel\", \"Vue\", \"Tailwind\"],\n    hired: false,\n  },\n  {\n    name: \"Imam Mufiid\",\n    status: \"Fulltime, Internship, Remote\",\n    role: \"Junior Android Engineer\",\n    location: \"Jakarta, Bandung, Surabaya\",\n    social_media: {\n      Linkedin: \"https://www.linkedin.com/in/imammufiid/\",\n      Github: \"https://github.com/imufiid\",\n    },\n    tech_stack: [\"Kotlin\"],\n    hired: false,\n  },\n  {\n    name: \"Muhammad Fadhila Abiyyu Faris\",\n    status: \"Fulltime, Internship, Remote\",\n    role: \"Full Stack Developer\",\n    location: \"Karawang\",\n    social_media: {\n      Linkedin: \"https://www.linkedin.com/in/muhammad-fadhila/\",\n      Github: \"https://github.com/fadhila36\",\n      Website: \"https://fadhilaabiyyu.my.id\",\n    },\n    tech_stack: [\"Laravel\", \"Codeigniter\", \"React\", \"Flutter\", \"WordPress\"],\n    hired: false,\n  },\n  {\n    name: \"Andri Desmana Putra Wijaya\",\n    status: \"Fulltime, Remote\",\n    role: \"Backend Engineer\",\n    location: \"Jakarta\",\n    social_media: {\n      Linkedin: \"https://www.linkedin.com/in/andri-desmana/\",\n      Github: \"https://github.com/andes2912\",\n      Website: \"https://andridesmana.pw\",\n    },\n    tech_stack: [\"Laravel\"],\n    hired: false,\n  },\n  {\n    name: \"Andrian Fadhilla\",\n    status: \"Freelance\",\n    role: \"ReactJS Developer\",\n    location: \"Tambun Selatan, Bekasi\",\n    social_media: {\n      Linkedin: \"https://www.linkedin.com/in/andrianfaa/\",\n      Github: \"https://github.com/andrianfaa\",\n      Website: \"https://www.andriann.co\",\n    },\n    tech_stack: [\"ReactJS\", \"Express\", \"NodeJS\", \"MongoDB\", \"Typescript\"],\n  },\n  {\n    name: \"Nugroho Dewantoro\",\n    status: \"Fulltime, Remote\",\n    role: \"Full Stack Developer\",\n    location: \"Jakarta\",\n    social_media: {\n      Linkedin: \"https://www.linkedin.com/in/nugroho-dewantoro-31951ba5/\",\n      Github: \"https://github.com/wisnunugroho21\",\n    },\n    tech_stack: [\"PHP\", \"Laravel\", \"VueJS\", \"NodeJS\", \"MySQL\"],\n    hired: false,\n  },\n  {\n    name: \"Benny Rahmat\",\n    status: \"Fulltime, Remote\",\n    role: \"Backend Developer\",\n    location: \"Banjarmasin\",\n    social_media: {\n      Linkedin: \"https://www.linkedin.com/in/akunbeben\",\n      Github: \"https://github.com/akunbeben\",\n    },\n    tech_stack: [\"PHP\", \"Laravel\", \"C#\", \".NET\", \".NET Core\"],\n    hired: false,\n  },\n  {\n    name: \"Wahyu Rahmana\",\n    status: \"Fulltime, Remote\",\n    role: \"Backend Developer\",\n    location: \"Sumbawa\",\n    social_media: {\n      Linkedin: \"https://www.linkedin.com/in/wahyu-rahmana/\",\n      Github: \"https://github.com/wahyurahmana\",\n      Website: \"http://www.indolearning.co.id/\",\n    },\n    tech_stack: [\n      \"ExpressJs\",\n      \"Nodejs\",\n      \"Postgresql\",\n      \"Redis\",\n      \"Vuejs\",\n      \"Reactjs\",\n      \"MongoDB\",\n      \"Hapi Framework\",\n      \"AWS Cloud\",\n      \"Sequelize\",\n    ],\n    hired: false,\n  },\n  {\n    name: \"Nicholas Alvi Saputra\",\n    status: \"Fulltime, Remote\",\n    role: \"Front End Developer\",\n    location: \"Bandung\",\n    social_media: {\n      Linkedin: \"https://www.linkedin.com/in/nicholasalvis\",\n      Github: \"https://github.com/kangnikol\",\n      Website: \"https://new-portfolio-kangnikol.vercel.app\",\n    },\n    tech_stack: [\n      \"PHP\",\n      \"Laravel\",\n      \"ReactJS\",\n      \"Javascript\",\n      \"MySQL\",\n      \"NodeJS\",\n      \"Bootstrap\",\n      \"NextJS\",\n      \"Tailwindcss\",\n      \"SASS\",\n      \"HTML5\",\n      \"CSS3\",\n    ],\n    hired: false,\n  },\n  {\n    name: \"Pramudya Arya Wicaksana\",\n    status: \"Fulltime, Remote\",\n    role: \"Software Engineer, DevOps\",\n    location: \"Bandung\",\n    social_media: {\n      Linkedin: \"https://www.linkedin.com/in/ryawcksn\",\n      Github: \"https://github.com/RyaWcksn\",\n    },\n    tech_stack: [\n      \"Go\",\n      \"Redis\",\n      \"NodeJS\",\n      \"Typescript\",\n      \"MongoDB\",\n      \"GCP\",\n      \"AWS\",\n      \"Docker\",\n      \"Kubernetes\",\n    ],\n    hired: false,\n  },\n  {\n    name: \"Andrian Fauzi\",\n    status: \"Fulltime, Remote, Onsite\",\n    role: \"Full Stack Developer\",\n    location: \"Lampung\",\n    social_media: {\n      Linkedin: \"https://www.linkedin.com/in/andrian-fauzi/\",\n      Github: \"https://github.com/AndrianFauzi\",\n    },\n    tech_stack: [\n      \"React.js\",\n      \"Vue.js\",\n      \"Nodejs\",\n      \"Go\",\n      \"Bootstrap\",\n      \"PostgreSQL\",\n      \"HTML5\",\n      \"CSS3\",\n      \"mongoDB\",\n    ],\n    hired: false,\n  },\n  {\n    name: \"Ibnu Raffi\",\n    status: \"Fulltime, Remote\",\n    role: \"Full Stack Developer\",\n    location: \"Sleman\",\n    social_media: {\n      Linkedin: \"https://www.linkedin.com/in/ibnu_raffi\",\n      Github: \"https://github.com/BnewVanZuarez/\",\n      Website: \"https://ibnuraffi.netlify.app/\",\n    },\n    tech_stack: [\"PHP\", \"Bootstrap\", \"MySQL\", \"Java Android\"],\n    hired: false,\n  },\n  {\n    name: \"Muhammad Fadhila Abiyyu Faris\",\n    status: \"Fulltime, Internship, Remote\",\n    role: \"Full Stack Developer\",\n    location: \"Karawang\",\n    social_media: {\n      Linkedin: \"https://www.linkedin.com/in/muhammad-fadhila/\",\n      Github: \"https://github.com/fadhila36\",\n      Website: \"https://fadhilaabiyyu.my.id\",\n    },\n    tech_stack: [\n      \"Laravel\",\n      \"Codeigniter\",\n      \"React\",\n      \"Flutter\",\n      \"WordPress\",\n      \"adonisJS\",\n      \"NodeJs\",\n    ],\n    hired: false,\n  },\n  {\n    name: \"Randy Maulana\",\n    status: \"Fulltime, Remote\",\n    role: \"Software Engineer\",\n    location: \"Jakarta, Indonesia\",\n    social_media: {\n      Linkedin: \"https://www.linkedin.com/in/randi-maulana-akbar\",\n      Github: \"https://github.com/reporandi\",\n    },\n    tech_stack: [\"Flutter\", \"MERN\"],\n    hired: true,\n  },\n  {\n    name: \"Alfan Fauzy\",\n    status: \"Fulltime, Remote\",\n    role: \"Frontend Engineer\",\n    location: \"Malang - Jakarta, Indonesia\",\n    social_media: {\n      Linkedin: \"https://www.linkedin.com/in/alfan-fauzy\",\n      Github: \"https://github.com/alfanfauzy\",\n    },\n    tech_stack: [\"ReactJs\", \"Typescript\"],\n    hired: true,\n  },\n  {\n    name: \"Abdullah Ammar\",\n    status: \"Fulltime, Remote\",\n    role: \"Frontend Engineer\",\n    location: \"Jakarta, Indonesia\",\n    social_media: {\n      Linkedin: \"https://www.linkedin.com/in/abdmmar\",\n      Github: \"https://github.com/abdmmar\",\n      Website: \"https://www.abdmmar.com\",\n    },\n    tech_stack: [\n      \"React\",\n      \"JavaScript\",\n      \"TypeScript\",\n      \"CSS\",\n      \"HTML\",\n      \"Slate\",\n      \"Apollo\",\n      \"GraphQL\",\n      \"styled-components\",\n      \"Node.js\",\n      \"Jest\",\n      \"Vite\",\n      \"Preact\",\n      \"Webpack\",\n      \"Next.js\",\n    ],\n    hired: false,\n  },\n  {\n    name: \"Bima Ahida Indaka Sugna\",\n    status: \"Fulltime, Remote\",\n    role: \"Backend Engineer\",\n    location: \"Ponorogo\",\n    social_media: {\n      Linkedin: \"https://www.linkedin.com/in/bima-ahida/\",\n      Github: \"https://github.com/bimaahida\",\n    },\n    tech_stack: [\n      \"Golang\",\n      \"Node.js\",\n      \"PostgreSQL\",\n      \"MySQL\",\n      \"MongoDB\",\n      \"CockroachDB\",\n      \"Redis\",\n      \"Elasticsearch\",\n      \"NATS Jetstream\",\n      \"Kafka\",\n      \"AWS SNS and SQS\",\n      \"Docker\",\n      \"Magento\",\n      \"Laravel\",\n      \"Codeigniter\",\n      \"GraphQL\",\n    ],\n    hired: false,\n  },\n];\n"
  },
  {
    "path": "src/data/types.d.ts",
    "content": "interface SocialMedia {\n  Linkedin?: string;\n  Github?: string;\n  Blog?: string;\n  AboutMe?: string;\n  Website?: string;\n  [key: string]: string;\n}\n\ninterface Person {\n  name: string;\n  status: string;\n  role: string;\n  location: string;\n  social_media: string | SocialMedia;\n  tech_stack: string[];\n  hired?: boolean;\n}\n\ninterface Employer {\n  name: string;\n  category: string;\n  link: string;\n  description: string;\n}\n"
  },
  {
    "path": "src/routes/+layout.svelte",
    "content": "<script>\n  import Nav from \"$src/components/Nav.svelte\";\n\n  import \"$src/app.css\";\n  import \"terminal.css\";\n</script>\n\n<main>\n  <Nav />\n  <slot />\n  <hr />\n  Dipersembahkan oleh\n  <a href=\"https://deeptech.id\" target=\"_blank\" rel=\"noreferrer\"\n    >DeepTech Foundation</a\n  >. Kode sumber tersedia di\n  <a\n    href=\"https://github.com/rizafahmi/carikerja\"\n    target=\"_blank\"\n    rel=\"noreferrer\">GitHub</a\n  >.\n</main>\n\n<style>\n  :global(body.dark-mode) main {\n    color: #ffffff;\n  }\n\n  main {\n    position: relative;\n    max-width: 56em;\n    padding: 2em;\n    margin: 0 auto;\n    box-sizing: border-box;\n  }\n  @media (max-width: 480px) {\n    /* smartphones, portrait iPhone, portrait 480x320 phones (Android) */\n    main {\n      padding: 0.5em;\n    }\n  }\n</style>\n"
  },
  {
    "path": "src/routes/+page.svelte",
    "content": "<script>\n  import people from \"$src/data/people.js\";\n  import {onMount} from \"svelte\";\n  import Select from \"svelte-select\";\n\n  /** @type {Person[]} */\n  let sortedPeople = [];\n  let getAllLocation = people.map((person) => person.location);\n  getAllLocation = [...new Set(getAllLocation)].sort((a, b) =>\n    a.localeCompare(b),\n  ); // get unique location and filter by alphabetically\n  let getAllTechStack = [\n    ...new Set(\n      people\n        .filter((person) => !person.hired)\n        .map((person) => person.tech_stack.map((tech) => tech.toUpperCase()))\n        .flat(),\n    ),\n  ].sort();\n\n  function getSortedPeople() {\n    // previous sorting doesn't work as expected\n    sortedPeople = people.sort((a, b) => {\n      let firstPersonName = a.name.replace(/\\s/, \"\").toLowerCase();\n      let secondPersonName = b.name.replace(/\\s/, \"\").toLowerCase();\n\n      if (firstPersonName < secondPersonName) {\n        return -1;\n      } else if (firstPersonName > secondPersonName) {\n        return 1;\n      } else {\n        return 0;\n      }\n    });\n\n    // remove duplicate data and filter only unhired job seeker\n    sortedPeople = sortedPeople.filter((person, index, self) => {\n      // temporarily filtering duplicate data using name and Linkedin (since it's unique)\n      return (\n        self.findIndex((predicateVariable) => {\n          return (\n            predicateVariable.name.replace(/\\s/, \"\").toLowerCase() ==\n              person.name.replace(/\\s/, \"\").toLowerCase() &&\n            // @ts-ignore TODO: need to check social_media type\n            predicateVariable.social_media[\"Linkedin\"] ==\n              // @ts-ignore\n              person.social_media[\"Linkedin\"]\n          );\n        }) == index && !person.hired\n      );\n    });\n  }\n\n  // Store filter data to implement multiple filtering\n  const filter = {\n    /** @type {string | null} */\n    location: \"\",\n    /** @type {string[]} */\n    techStacks: [],\n  };\n\n  // Filter function triggered by any filter changes\n  function filterPeople() {\n    getSortedPeople();\n\n    if (filter.location) {\n      sortedPeople = sortedPeople.filter(\n        (person) => person.location === filter.location,\n      );\n    }\n\n    if (filter.techStacks.length) {\n      sortedPeople = sortedPeople.filter((person) => {\n        let isExist = false;\n        filter.techStacks.some((techStack) => {\n          if (\n            person.tech_stack\n              .map((stack) => stack.toUpperCase())\n              .includes(techStack)\n          ) {\n            isExist = true;\n            return true;\n          }\n        });\n        return isExist;\n      });\n    }\n  }\n\n  /**\t@param {CustomEvent<{ value: string }>} e */\n  function handleLocationChange(e) {\n    const location = e.detail ? e.detail.value : null;\n    filter.location = location;\n\n    filterPeople();\n  }\n\n  /**\t@param {CustomEvent<{ value:string }[]>} e */\n  function handleStackChange(e) {\n    const techStacks = e.detail ? e.detail.map((value) => value.value) : [];\n    filter.techStacks = techStacks;\n\n    filterPeople();\n  }\n\n  /** @type {{ text: string; style: string }[]} */\n  let badges = [];\n\n  /** @param {string} text */\n  function getBadgeStyle(text) {\n    if (!text) return;\n    const existingBadge = badges.find(\n      (badge) => badge.text === text.toLowerCase(),\n    );\n    if (existingBadge) {\n      return existingBadge.style;\n    }\n\n    const red = (Math.random() * 256) | 0;\n    const green = (Math.random() * 256) | 0;\n    const blue = (Math.random() * 256) | 0;\n\n    const yiq = (red * 299 + green * 587 + blue * 114) / 1000;\n    const textColor = yiq >= 128 ? \"#000\" : \"#fff\";\n\n    const style = `background-color: rgb(${red}, ${green}, ${blue}); color: ${textColor}`;\n\n    badges.push({text: text.toLowerCase(), style});\n\n    return style;\n  }\n\n  onMount(() => {\n    getSortedPeople();\n  });\n</script>\n\n<svelte:head>\n  <title\n    >Daftar engineer keren yang terkena dampak pemutusan hubungan kerja karena\n    pandemi.</title\n  >\n</svelte:head>\n\n<h4>Kata siapa cari software engineer yang berpengalaman itu susah?</h4>\n<p>\n  Sekarang, kami buat jadi mudah! Berikut adalah daftar engineer keren yang\n  terkena dampak pemutusan hubungan kerja karena pandemi.\n</p>\n<div class=\"filter\">\n  <div>\n    <span>Cari Berdasarkan Tech Stack</span>\n    <Select\n      on:select={handleStackChange}\n      items={getAllTechStack}\n      isMulti={true}\n      id=\"inputTechStack\"\n    />\n  </div>\n  <div>\n    <span>Cari Berdasarkan Lokasi</span>\n    <Select\n      on:select={handleLocationChange}\n      on:clear={handleLocationChange}\n      items={getAllLocation}\n      id=\"inputLocation\"\n    />\n  </div>\n</div>\n<div>\n  {#each sortedPeople as p}\n    <div class=\"terminal-card\">\n      <header>{p.name}</header>\n      <ul>\n        <li>⏲️ {p.status}</li>\n        <li>💻 {p.role}</li>\n        <li id=\"listLocation\">📍 {p.location}</li>\n        {#if p.tech_stack.length != 0}\n          <li>\n            ⚙️\n            {#each p.tech_stack as tech}\n              <span class=\"badge\" style={getBadgeStyle(tech)}>{tech}</span>\n            {/each}\n          </li>\n        {/if}\n        <li>\n          {#if p.hired}\n            <div class=\"hired\">HIRED!</div>\n          {/if}\n\n          {#if typeof p.social_media == \"string\"}\n            <span>🔗</span>\n            <a href={p.social_media} target=\"_blank\" rel=\"noreferrer\">\n              Linkedin\n            </a>\n          {/if}\n\n          {#if typeof p.social_media === \"object\"}\n            {#each Object.keys(p.social_media).sort() as key}\n              <span>🔗</span>\n              <a href={p.social_media[key]} target=\"_blank\" rel=\"noreferrer\">\n                {key}\n              </a>\n            {/each}\n          {/if}\n        </li>\n      </ul>\n    </div>\n  {/each}\n  <hr />\n</div>\n<div>\n  <h4>Mau menambahkan seseorang?</h4>\n\n  <a\n    href=\"https://github.com/rizafahmi/carikerja\"\n    target=\"_blank\"\n    rel=\"noreferrer\"\n  >\n    Clone repositori ini\n  </a>\n  dan tambahkan data baru di\n  <code>src/data/people.js</code>\n  . Bisa juga edit langsung melalui\n  <a\n    href=\"https://github.com/rizafahmi/carikerja/edit/main/src/data/people.js\"\n    target=\"_blank\"\n    rel=\"noreferrer\"\n  >\n    Github\n  </a>\n  .\n</div>\n\n<style>\n  .terminal-card {\n    margin: 1em;\n  }\n  ul {\n    margin-left: 1em;\n  }\n  li {\n    margin-bottom: 0.5em;\n  }\n  .badge {\n    margin-right: 0.5em;\n    padding: 0.25em;\n    padding-left: 0.5em;\n    padding-right: 0.5em;\n    border-radius: 0.5em;\n    margin-bottom: 0.25em;\n    display: inline-block;\n  }\n  .hired {\n    background-color: rgba(21, 21, 21, 0.75);\n    z-index: 999;\n    position: absolute;\n    display: inline-block;\n    color: #d20862;\n    font-size: 2em;\n    font-weight: 870;\n  }\n\n  .filter {\n    display: flex;\n    gap: 2rem;\n  }\n\n  .filter > div {\n    flex: 1 1 0%;\n  }\n</style>\n"
  },
  {
    "path": "src/routes/about/+page.svelte",
    "content": "<svelte:head>\n  <title>Tentang Carikerja</title>\n</svelte:head>\n\n<h1>Tentang Carikerja</h1>\n\n<p>\n  Kami menghubungkan para Software Engineer kece di tanah air yang terpaksa\n  harus terkena pemutusan hubungan kerja karena pandemi COVID-19 dengan\n  perusahaan yang sedang mencari talenta digital.\n</p>\n<h4>Ingin menambahkan seseorang?</h4>\n<a\n  href=\"https://github.com/rizafahmi/carikerja\"\n  target=\"_blank\"\n  rel=\"noreferrer\"\n>\n  Clone repositori ini\n</a>\ndan tambahkan data baru di <code>src/data/people.js</code>. Bisa juga edit\nlangsung melalui\n<a\n  href=\"https://github.com/rizafahmi/carikerja/edit/main/src/data/people.js\"\n  target=\"_blank\"\n  rel=\"noreferrer\"\n>\n  Github\n</a>.\n<br />\n<br />\n<h4>Ingin perusahaanmu ada di daftar kami?</h4>\n<a\n  href=\"https://github.com/rizafahmi/carikerja\"\n  target=\"_blank\"\n  rel=\"noreferrer\"\n>\n  Clone repositori ini\n</a>\ndan tambahkan data baru di <code>src/data/employer.js</code>. Bisa juga edit\nlangsung melalui\n<a\n  href=\"https://github.com/rizafahmi/carikerja/edit/main/src/data/employer.js\"\n  target=\"_blank\"\n  rel=\"noreferrer\"\n>\n  Github\n</a>.\n"
  },
  {
    "path": "src/routes/hiring/+page.svelte",
    "content": "<script>\n  import employers from \"$src/data/employer.js\";\n\n  employers.sort((a, b) => {\n    const nameA = a.name.replace(/\\s/g, \"\").toUpperCase();\n    const nameB = b.name.replace(/\\s/g, \"\").toUpperCase();\n\n    if (nameA < nameB) {\n      return -1;\n    } else if (nameA > nameB) {\n      return 1;\n    } else {\n      return 0;\n    }\n  });\n</script>\n\n<svelte:head>\n  <title>\n    Untukmu yang terdampak, temukan beberapa perusahaan yang masih membuka\n    lowongan\n  </title>\n</svelte:head>\n\n<h1>\n  Untukmu yang terdampak, temukan beberapa perusahaan yang masih membuka\n  lowongan:\n</h1>\n\n<ul>\n  {#each employers as employer}\n    <li>\n      <a href={employer.link} target=\"_blank\" rel=\"noreferrer\"\n        >{employer.name}</a\n      >\n      <p>{employer.description}</p>\n    </li>\n  {:else}\n    <li>data perusahaan belum tersedia</li>\n  {/each}\n</ul>\n\n<hr />\n<h4>Ingin perusahaanmu ada di daftar kami?</h4>\n<p>\n  <a\n    href=\"https://github.com/rizafahmi/carikerja\"\n    target=\"_blank\"\n    rel=\"noreferrer\"\n  >\n    Clone repositori ini\n  </a>\n  dan tambahkan data baru di\n  <code>src/data/employer.js</code>\n  . Bisa juga edit langsung via\n  <a\n    href=\"https://github.com/rizafahmi/carikerja/edit/main/src/data/employer.js\"\n    target=\"_blank\"\n    rel=\"noreferrer\"\n  >\n    Github\n  </a>\n  .\n</p>\n"
  },
  {
    "path": "src/stores/theme.js",
    "content": "import {writable} from \"svelte/store\";\n\n/**\n * @type {import(\"svelte/store\").Writable<string | null>}\n */\nexport let theme;\n\nif (typeof window !== \"undefined\") {\n  theme = writable(localStorage.getItem(\"theme\") || \"Light\");\n} else {\n  theme = writable(null);\n}\n\ntheme.subscribe((val) => {\n  if (typeof window !== \"undefined\") {\n    if (val === \"Dark\") {\n      window.document.body.classList.add(\"dark-mode\");\n    } else {\n      window.document.body.classList.remove(\"dark-mode\");\n    }\n  }\n});\n"
  },
  {
    "path": "svelte.config.js",
    "content": "import adapter from \"@sveltejs/adapter-auto\";\n\n/** @type {import('@sveltejs/kit').Config} */\nconst config = {\n  kit: {\n    adapter: adapter(),\n    alias: {\n      $src: \"src\",\n    },\n  },\n};\n\nexport default config;\n"
  },
  {
    "path": "tests/home.test.js",
    "content": "import {test, expect} from \"@playwright/test\";\nimport {HomePage} from \"./pages/home.page.js\";\n\ntest.describe(\"Cari Kerja Home Page E2E Test\", () => {\n  test.beforeEach(async ({page}) => {\n    const homePage = new HomePage(page);\n    await homePage.open();\n    expect(await page.textContent(\"h4\")).toBe(\n      \"Kata siapa cari software engineer yang berpengalaman itu susah?\",\n    );\n  });\n\n  test(\"user should be able to filter using location\", async ({page}) => {\n    const homePage = new HomePage(page);\n    await homePage.filterByLocation(\"bandung\");\n  });\n});\n"
  },
  {
    "path": "tests/pages/home.page.js",
    "content": "import {expect} from \"@playwright/test\";\n\nexport class HomePage {\n  /**\n   * @param { import('@playwright/test').Page} page\n   */\n\n  constructor(page) {\n    this.page = page;\n    this.inputLocation = page.locator(\"#inputLocation\");\n    this.listLocation = page.locator(\"#listLocation\");\n  }\n\n  async open() {\n    await this.page.goto(\"/\");\n  }\n\n  /**\n   * @param {string} location\n   */\n  async filterByLocation(location) {\n    await this.inputLocation.click();\n    await this.inputLocation.fill(location);\n    await this.page.keyboard.press(\"Enter\");\n    for (const li of await this.listLocation.all()) {\n      expect(li).toContainText(location, {ignoreCase: true});\n    }\n  }\n}\n"
  },
  {
    "path": "vite.config.js",
    "content": "import {sveltekit} from \"@sveltejs/kit/vite\";\n\n/** @type {import('vite').UserConfig} */\nconst config = {\n  plugins: [sveltekit()],\n  test: {\n    include: [\"src/**/*.{test,spec}.{js,ts}\"],\n  },\n};\n\nexport default config;\n"
  }
]