From 86fbde374b2a191e30067bee38d94a7ce7f647b0 Mon Sep 17 00:00:00 2001 From: ronload <91997734+ronload@users.noreply.github.com> Date: Wed, 24 Jun 2026 12:34:24 +0800 Subject: [PATCH 1/2] refactor: migrate to pnpm workspace monorepo Restructure the single Next.js package into a pnpm workspace: - apps/web: the Next.js app (UI, App Router pages, SSG district routes, ETL scripts, and public/data) - packages/core (@zipkit/core): framework-agnostic domain logic extracted from src/lib -- lookup-zipcode (3+3 specificity matching), format-english-address (UPU formatting), and shared types The app consumes @zipkit/core via Next transpilePackages; exports point at the TS source, so there is no build step yet. Root package.json holds workspace scripts that delegate to apps/web via --filter, and Prettier now runs from the repo root. Updated .gitignore and .prettierignore paths. --- .gitignore | 12 ++-- .prettierignore | 4 +- components.json => apps/web/components.json | 0 .../web/eslint.config.mjs | 0 next.config.ts => apps/web/next.config.ts | 1 + apps/web/package.json | 52 ++++++++++++++++++ .../web/postcss.config.mjs | 0 {public => apps/web/public}/data/base.json | 0 .../web/public}/data/map/counties-10t.json | 0 .../web/public}/data/map/towns-10t.json | 0 .../web/public}/data/roads/100.json | 0 .../web/public}/data/roads/103.json | 0 .../web/public}/data/roads/104.json | 0 .../web/public}/data/roads/105.json | 0 .../web/public}/data/roads/106.json | 0 .../web/public}/data/roads/108.json | 0 .../web/public}/data/roads/110.json | 0 .../web/public}/data/roads/111.json | 0 .../web/public}/data/roads/112.json | 0 .../web/public}/data/roads/114.json | 0 .../web/public}/data/roads/115.json | 0 .../web/public}/data/roads/116.json | 0 .../web/public}/data/roads/200.json | 0 .../web/public}/data/roads/201.json | 0 .../web/public}/data/roads/202.json | 0 .../web/public}/data/roads/203.json | 0 .../web/public}/data/roads/204.json | 0 .../web/public}/data/roads/205.json | 0 .../web/public}/data/roads/206.json | 0 .../web/public}/data/roads/207.json | 0 .../web/public}/data/roads/208.json | 0 .../web/public}/data/roads/209.json | 0 .../web/public}/data/roads/210.json | 0 .../web/public}/data/roads/211.json | 0 .../web/public}/data/roads/212.json | 0 .../web/public}/data/roads/220.json | 0 .../web/public}/data/roads/221.json | 0 .../web/public}/data/roads/222.json | 0 .../web/public}/data/roads/223.json | 0 .../web/public}/data/roads/224.json | 0 .../web/public}/data/roads/226.json | 0 .../web/public}/data/roads/227.json | 0 .../web/public}/data/roads/228.json | 0 .../web/public}/data/roads/231.json | 0 .../web/public}/data/roads/232.json | 0 .../web/public}/data/roads/233.json | 0 .../web/public}/data/roads/234.json | 0 .../web/public}/data/roads/235.json | 0 .../web/public}/data/roads/236.json | 0 .../web/public}/data/roads/237.json | 0 .../web/public}/data/roads/238.json | 0 .../web/public}/data/roads/239.json | 0 .../web/public}/data/roads/241.json | 0 .../web/public}/data/roads/242.json | 0 .../web/public}/data/roads/243.json | 0 .../web/public}/data/roads/244.json | 0 .../web/public}/data/roads/247.json | 0 .../web/public}/data/roads/248.json | 0 .../web/public}/data/roads/249.json | 0 .../web/public}/data/roads/251.json | 0 .../web/public}/data/roads/252.json | 0 .../web/public}/data/roads/253.json | 0 .../web/public}/data/roads/260.json | 0 .../web/public}/data/roads/261.json | 0 .../web/public}/data/roads/262.json | 0 .../web/public}/data/roads/263.json | 0 .../web/public}/data/roads/264.json | 0 .../web/public}/data/roads/265.json | 0 .../web/public}/data/roads/266.json | 0 .../web/public}/data/roads/267.json | 0 .../web/public}/data/roads/268.json | 0 .../web/public}/data/roads/269.json | 0 .../web/public}/data/roads/270.json | 0 .../web/public}/data/roads/272.json | 0 .../web/public}/data/roads/290.json | 0 .../web/public}/data/roads/300.json | 0 .../web/public}/data/roads/302.json | 0 .../web/public}/data/roads/303.json | 0 .../web/public}/data/roads/304.json | 0 .../web/public}/data/roads/305.json | 0 .../web/public}/data/roads/306.json | 0 .../web/public}/data/roads/307.json | 0 .../web/public}/data/roads/308.json | 0 .../web/public}/data/roads/310.json | 0 .../web/public}/data/roads/311.json | 0 .../web/public}/data/roads/312.json | 0 .../web/public}/data/roads/313.json | 0 .../web/public}/data/roads/314.json | 0 .../web/public}/data/roads/315.json | 0 .../web/public}/data/roads/320.json | 0 .../web/public}/data/roads/324.json | 0 .../web/public}/data/roads/325.json | 0 .../web/public}/data/roads/326.json | 0 .../web/public}/data/roads/327.json | 0 .../web/public}/data/roads/328.json | 0 .../web/public}/data/roads/330.json | 0 .../web/public}/data/roads/333.json | 0 .../web/public}/data/roads/334.json | 0 .../web/public}/data/roads/335.json | 0 .../web/public}/data/roads/336.json | 0 .../web/public}/data/roads/337.json | 0 .../web/public}/data/roads/338.json | 0 .../web/public}/data/roads/350.json | 0 .../web/public}/data/roads/351.json | 0 .../web/public}/data/roads/352.json | 0 .../web/public}/data/roads/353.json | 0 .../web/public}/data/roads/354.json | 0 .../web/public}/data/roads/356.json | 0 .../web/public}/data/roads/357.json | 0 .../web/public}/data/roads/358.json | 0 .../web/public}/data/roads/360.json | 0 .../web/public}/data/roads/361.json | 0 .../web/public}/data/roads/362.json | 0 .../web/public}/data/roads/363.json | 0 .../web/public}/data/roads/364.json | 0 .../web/public}/data/roads/365.json | 0 .../web/public}/data/roads/366.json | 0 .../web/public}/data/roads/367.json | 0 .../web/public}/data/roads/368.json | 0 .../web/public}/data/roads/369.json | 0 .../web/public}/data/roads/400.json | 0 .../web/public}/data/roads/401.json | 0 .../web/public}/data/roads/402.json | 0 .../web/public}/data/roads/403.json | 0 .../web/public}/data/roads/404.json | 0 .../web/public}/data/roads/406.json | 0 .../web/public}/data/roads/407.json | 0 .../web/public}/data/roads/408.json | 0 .../web/public}/data/roads/411.json | 0 .../web/public}/data/roads/412.json | 0 .../web/public}/data/roads/413.json | 0 .../web/public}/data/roads/414.json | 0 .../web/public}/data/roads/420.json | 0 .../web/public}/data/roads/421.json | 0 .../web/public}/data/roads/422.json | 0 .../web/public}/data/roads/423.json | 0 .../web/public}/data/roads/424.json | 0 .../web/public}/data/roads/426.json | 0 .../web/public}/data/roads/427.json | 0 .../web/public}/data/roads/428.json | 0 .../web/public}/data/roads/429.json | 0 .../web/public}/data/roads/432.json | 0 .../web/public}/data/roads/433.json | 0 .../web/public}/data/roads/434.json | 0 .../web/public}/data/roads/435.json | 0 .../web/public}/data/roads/436.json | 0 .../web/public}/data/roads/437.json | 0 .../web/public}/data/roads/438.json | 0 .../web/public}/data/roads/439.json | 0 .../web/public}/data/roads/500.json | 0 .../web/public}/data/roads/502.json | 0 .../web/public}/data/roads/503.json | 0 .../web/public}/data/roads/504.json | 0 .../web/public}/data/roads/505.json | 0 .../web/public}/data/roads/506.json | 0 .../web/public}/data/roads/507.json | 0 .../web/public}/data/roads/508.json | 0 .../web/public}/data/roads/509.json | 0 .../web/public}/data/roads/510.json | 0 .../web/public}/data/roads/511.json | 0 .../web/public}/data/roads/512.json | 0 .../web/public}/data/roads/513.json | 0 .../web/public}/data/roads/514.json | 0 .../web/public}/data/roads/515.json | 0 .../web/public}/data/roads/516.json | 0 .../web/public}/data/roads/520.json | 0 .../web/public}/data/roads/521.json | 0 .../web/public}/data/roads/522.json | 0 .../web/public}/data/roads/523.json | 0 .../web/public}/data/roads/524.json | 0 .../web/public}/data/roads/525.json | 0 .../web/public}/data/roads/526.json | 0 .../web/public}/data/roads/527.json | 0 .../web/public}/data/roads/528.json | 0 .../web/public}/data/roads/530.json | 0 .../web/public}/data/roads/540.json | 0 .../web/public}/data/roads/541.json | 0 .../web/public}/data/roads/542.json | 0 .../web/public}/data/roads/544.json | 0 .../web/public}/data/roads/545.json | 0 .../web/public}/data/roads/546.json | 0 .../web/public}/data/roads/551.json | 0 .../web/public}/data/roads/552.json | 0 .../web/public}/data/roads/553.json | 0 .../web/public}/data/roads/555.json | 0 .../web/public}/data/roads/556.json | 0 .../web/public}/data/roads/557.json | 0 .../web/public}/data/roads/558.json | 0 .../web/public}/data/roads/600.json | 0 .../web/public}/data/roads/602.json | 0 .../web/public}/data/roads/603.json | 0 .../web/public}/data/roads/604.json | 0 .../web/public}/data/roads/605.json | 0 .../web/public}/data/roads/606.json | 0 .../web/public}/data/roads/607.json | 0 .../web/public}/data/roads/608.json | 0 .../web/public}/data/roads/611.json | 0 .../web/public}/data/roads/612.json | 0 .../web/public}/data/roads/613.json | 0 .../web/public}/data/roads/614.json | 0 .../web/public}/data/roads/615.json | 0 .../web/public}/data/roads/616.json | 0 .../web/public}/data/roads/621.json | 0 .../web/public}/data/roads/622.json | 0 .../web/public}/data/roads/623.json | 0 .../web/public}/data/roads/624.json | 0 .../web/public}/data/roads/625.json | 0 .../web/public}/data/roads/630.json | 0 .../web/public}/data/roads/631.json | 0 .../web/public}/data/roads/632.json | 0 .../web/public}/data/roads/633.json | 0 .../web/public}/data/roads/634.json | 0 .../web/public}/data/roads/635.json | 0 .../web/public}/data/roads/636.json | 0 .../web/public}/data/roads/637.json | 0 .../web/public}/data/roads/638.json | 0 .../web/public}/data/roads/640.json | 0 .../web/public}/data/roads/643.json | 0 .../web/public}/data/roads/646.json | 0 .../web/public}/data/roads/647.json | 0 .../web/public}/data/roads/648.json | 0 .../web/public}/data/roads/649.json | 0 .../web/public}/data/roads/651.json | 0 .../web/public}/data/roads/652.json | 0 .../web/public}/data/roads/653.json | 0 .../web/public}/data/roads/654.json | 0 .../web/public}/data/roads/655.json | 0 .../web/public}/data/roads/700.json | 0 .../web/public}/data/roads/701.json | 0 .../web/public}/data/roads/702.json | 0 .../web/public}/data/roads/704.json | 0 .../web/public}/data/roads/708.json | 0 .../web/public}/data/roads/709.json | 0 .../web/public}/data/roads/710.json | 0 .../web/public}/data/roads/711.json | 0 .../web/public}/data/roads/712.json | 0 .../web/public}/data/roads/713.json | 0 .../web/public}/data/roads/714.json | 0 .../web/public}/data/roads/715.json | 0 .../web/public}/data/roads/716.json | 0 .../web/public}/data/roads/717.json | 0 .../web/public}/data/roads/718.json | 0 .../web/public}/data/roads/719.json | 0 .../web/public}/data/roads/720.json | 0 .../web/public}/data/roads/721.json | 0 .../web/public}/data/roads/722.json | 0 .../web/public}/data/roads/723.json | 0 .../web/public}/data/roads/724.json | 0 .../web/public}/data/roads/725.json | 0 .../web/public}/data/roads/726.json | 0 .../web/public}/data/roads/727.json | 0 .../web/public}/data/roads/730.json | 0 .../web/public}/data/roads/731.json | 0 .../web/public}/data/roads/732.json | 0 .../web/public}/data/roads/733.json | 0 .../web/public}/data/roads/734.json | 0 .../web/public}/data/roads/735.json | 0 .../web/public}/data/roads/736.json | 0 .../web/public}/data/roads/737.json | 0 .../web/public}/data/roads/741.json | 0 .../web/public}/data/roads/742.json | 0 .../web/public}/data/roads/743.json | 0 .../web/public}/data/roads/744.json | 0 .../web/public}/data/roads/745.json | 0 .../web/public}/data/roads/800.json | 0 .../web/public}/data/roads/801.json | 0 .../web/public}/data/roads/802.json | 0 .../web/public}/data/roads/803.json | 0 .../web/public}/data/roads/804.json | 0 .../web/public}/data/roads/805.json | 0 .../web/public}/data/roads/806.json | 0 .../web/public}/data/roads/807.json | 0 .../web/public}/data/roads/811.json | 0 .../web/public}/data/roads/812.json | 0 .../web/public}/data/roads/813.json | 0 .../web/public}/data/roads/814.json | 0 .../web/public}/data/roads/815.json | 0 .../web/public}/data/roads/817.json | 0 .../web/public}/data/roads/819.json | 0 .../web/public}/data/roads/820.json | 0 .../web/public}/data/roads/821.json | 0 .../web/public}/data/roads/822.json | 0 .../web/public}/data/roads/823.json | 0 .../web/public}/data/roads/824.json | 0 .../web/public}/data/roads/825.json | 0 .../web/public}/data/roads/826.json | 0 .../web/public}/data/roads/827.json | 0 .../web/public}/data/roads/828.json | 0 .../web/public}/data/roads/829.json | 0 .../web/public}/data/roads/830.json | 0 .../web/public}/data/roads/831.json | 0 .../web/public}/data/roads/832.json | 0 .../web/public}/data/roads/833.json | 0 .../web/public}/data/roads/840.json | 0 .../web/public}/data/roads/842.json | 0 .../web/public}/data/roads/843.json | 0 .../web/public}/data/roads/844.json | 0 .../web/public}/data/roads/845.json | 0 .../web/public}/data/roads/846.json | 0 .../web/public}/data/roads/847.json | 0 .../web/public}/data/roads/848.json | 0 .../web/public}/data/roads/849.json | 0 .../web/public}/data/roads/851.json | 0 .../web/public}/data/roads/852.json | 0 .../web/public}/data/roads/880.json | 0 .../web/public}/data/roads/881.json | 0 .../web/public}/data/roads/882.json | 0 .../web/public}/data/roads/883.json | 0 .../web/public}/data/roads/884.json | 0 .../web/public}/data/roads/885.json | 0 .../web/public}/data/roads/890.json | 0 .../web/public}/data/roads/891.json | 0 .../web/public}/data/roads/892.json | 0 .../web/public}/data/roads/893.json | 0 .../web/public}/data/roads/894.json | 0 .../web/public}/data/roads/896.json | 0 .../web/public}/data/roads/900.json | 0 .../web/public}/data/roads/901.json | 0 .../web/public}/data/roads/902.json | 0 .../web/public}/data/roads/903.json | 0 .../web/public}/data/roads/904.json | 0 .../web/public}/data/roads/905.json | 0 .../web/public}/data/roads/906.json | 0 .../web/public}/data/roads/907.json | 0 .../web/public}/data/roads/908.json | 0 .../web/public}/data/roads/909.json | 0 .../web/public}/data/roads/911.json | 0 .../web/public}/data/roads/912.json | 0 .../web/public}/data/roads/913.json | 0 .../web/public}/data/roads/920.json | 0 .../web/public}/data/roads/921.json | 0 .../web/public}/data/roads/922.json | 0 .../web/public}/data/roads/923.json | 0 .../web/public}/data/roads/924.json | 0 .../web/public}/data/roads/925.json | 0 .../web/public}/data/roads/926.json | 0 .../web/public}/data/roads/927.json | 0 .../web/public}/data/roads/928.json | 0 .../web/public}/data/roads/929.json | 0 .../web/public}/data/roads/931.json | 0 .../web/public}/data/roads/932.json | 0 .../web/public}/data/roads/940.json | 0 .../web/public}/data/roads/941.json | 0 .../web/public}/data/roads/942.json | 0 .../web/public}/data/roads/943.json | 0 .../web/public}/data/roads/944.json | 0 .../web/public}/data/roads/945.json | 0 .../web/public}/data/roads/946.json | 0 .../web/public}/data/roads/947.json | 0 .../web/public}/data/roads/950.json | 0 .../web/public}/data/roads/951.json | 0 .../web/public}/data/roads/952.json | 0 .../web/public}/data/roads/953.json | 0 .../web/public}/data/roads/954.json | 0 .../web/public}/data/roads/955.json | 0 .../web/public}/data/roads/956.json | 0 .../web/public}/data/roads/957.json | 0 .../web/public}/data/roads/958.json | 0 .../web/public}/data/roads/959.json | 0 .../web/public}/data/roads/961.json | 0 .../web/public}/data/roads/962.json | 0 .../web/public}/data/roads/963.json | 0 .../web/public}/data/roads/964.json | 0 .../web/public}/data/roads/965.json | 0 .../web/public}/data/roads/966.json | 0 .../web/public}/data/roads/970.json | 0 .../web/public}/data/roads/971.json | 0 .../web/public}/data/roads/972.json | 0 .../web/public}/data/roads/973.json | 0 .../web/public}/data/roads/974.json | 0 .../web/public}/data/roads/975.json | 0 .../web/public}/data/roads/976.json | 0 .../web/public}/data/roads/977.json | 0 .../web/public}/data/roads/978.json | 0 .../web/public}/data/roads/979.json | 0 .../web/public}/data/roads/981.json | 0 .../web/public}/data/roads/982.json | 0 .../web/public}/data/roads/983.json | 0 .../data/styles/dark-matter-neutral.json | 0 .../public}/data/styles/positron-neutral.json | 0 .../web/public}/data/zip-ranges/100.json | 0 .../web/public}/data/zip-ranges/103.json | 0 .../web/public}/data/zip-ranges/104.json | 0 .../web/public}/data/zip-ranges/105.json | 0 .../web/public}/data/zip-ranges/106.json | 0 .../web/public}/data/zip-ranges/108.json | 0 .../web/public}/data/zip-ranges/110.json | 0 .../web/public}/data/zip-ranges/111.json | 0 .../web/public}/data/zip-ranges/112.json | 0 .../web/public}/data/zip-ranges/114.json | 0 .../web/public}/data/zip-ranges/115.json | 0 .../web/public}/data/zip-ranges/116.json | 0 .../web/public}/data/zip-ranges/200.json | 0 .../web/public}/data/zip-ranges/201.json | 0 .../web/public}/data/zip-ranges/202.json | 0 .../web/public}/data/zip-ranges/203.json | 0 .../web/public}/data/zip-ranges/204.json | 0 .../web/public}/data/zip-ranges/205.json | 0 .../web/public}/data/zip-ranges/206.json | 0 .../web/public}/data/zip-ranges/207.json | 0 .../web/public}/data/zip-ranges/208.json | 0 .../web/public}/data/zip-ranges/209.json | 0 .../web/public}/data/zip-ranges/210.json | 0 .../web/public}/data/zip-ranges/211.json | 0 .../web/public}/data/zip-ranges/212.json | 0 .../web/public}/data/zip-ranges/220.json | 0 .../web/public}/data/zip-ranges/221.json | 0 .../web/public}/data/zip-ranges/222.json | 0 .../web/public}/data/zip-ranges/223.json | 0 .../web/public}/data/zip-ranges/224.json | 0 .../web/public}/data/zip-ranges/226.json | 0 .../web/public}/data/zip-ranges/227.json | 0 .../web/public}/data/zip-ranges/228.json | 0 .../web/public}/data/zip-ranges/231.json | 0 .../web/public}/data/zip-ranges/232.json | 0 .../web/public}/data/zip-ranges/233.json | 0 .../web/public}/data/zip-ranges/234.json | 0 .../web/public}/data/zip-ranges/235.json | 0 .../web/public}/data/zip-ranges/236.json | 0 .../web/public}/data/zip-ranges/237.json | 0 .../web/public}/data/zip-ranges/238.json | 0 .../web/public}/data/zip-ranges/239.json | 0 .../web/public}/data/zip-ranges/241.json | 0 .../web/public}/data/zip-ranges/242.json | 0 .../web/public}/data/zip-ranges/243.json | 0 .../web/public}/data/zip-ranges/244.json | 0 .../web/public}/data/zip-ranges/247.json | 0 .../web/public}/data/zip-ranges/248.json | 0 .../web/public}/data/zip-ranges/249.json | 0 .../web/public}/data/zip-ranges/251.json | 0 .../web/public}/data/zip-ranges/252.json | 0 .../web/public}/data/zip-ranges/253.json | 0 .../web/public}/data/zip-ranges/260.json | 0 .../web/public}/data/zip-ranges/261.json | 0 .../web/public}/data/zip-ranges/262.json | 0 .../web/public}/data/zip-ranges/263.json | 0 .../web/public}/data/zip-ranges/264.json | 0 .../web/public}/data/zip-ranges/265.json | 0 .../web/public}/data/zip-ranges/266.json | 0 .../web/public}/data/zip-ranges/267.json | 0 .../web/public}/data/zip-ranges/268.json | 0 .../web/public}/data/zip-ranges/269.json | 0 .../web/public}/data/zip-ranges/270.json | 0 .../web/public}/data/zip-ranges/272.json | 0 .../web/public}/data/zip-ranges/290.json | 0 .../web/public}/data/zip-ranges/300.json | 0 .../web/public}/data/zip-ranges/301.json | 0 .../web/public}/data/zip-ranges/302.json | 0 .../web/public}/data/zip-ranges/303.json | 0 .../web/public}/data/zip-ranges/304.json | 0 .../web/public}/data/zip-ranges/305.json | 0 .../web/public}/data/zip-ranges/306.json | 0 .../web/public}/data/zip-ranges/307.json | 0 .../web/public}/data/zip-ranges/308.json | 0 .../web/public}/data/zip-ranges/309.json | 0 .../web/public}/data/zip-ranges/310.json | 0 .../web/public}/data/zip-ranges/311.json | 0 .../web/public}/data/zip-ranges/312.json | 0 .../web/public}/data/zip-ranges/313.json | 0 .../web/public}/data/zip-ranges/314.json | 0 .../web/public}/data/zip-ranges/315.json | 0 .../web/public}/data/zip-ranges/320.json | 0 .../web/public}/data/zip-ranges/324.json | 0 .../web/public}/data/zip-ranges/325.json | 0 .../web/public}/data/zip-ranges/326.json | 0 .../web/public}/data/zip-ranges/327.json | 0 .../web/public}/data/zip-ranges/328.json | 0 .../web/public}/data/zip-ranges/330.json | 0 .../web/public}/data/zip-ranges/333.json | 0 .../web/public}/data/zip-ranges/334.json | 0 .../web/public}/data/zip-ranges/335.json | 0 .../web/public}/data/zip-ranges/336.json | 0 .../web/public}/data/zip-ranges/337.json | 0 .../web/public}/data/zip-ranges/338.json | 0 .../web/public}/data/zip-ranges/350.json | 0 .../web/public}/data/zip-ranges/351.json | 0 .../web/public}/data/zip-ranges/352.json | 0 .../web/public}/data/zip-ranges/353.json | 0 .../web/public}/data/zip-ranges/354.json | 0 .../web/public}/data/zip-ranges/356.json | 0 .../web/public}/data/zip-ranges/357.json | 0 .../web/public}/data/zip-ranges/358.json | 0 .../web/public}/data/zip-ranges/360.json | 0 .../web/public}/data/zip-ranges/361.json | 0 .../web/public}/data/zip-ranges/362.json | 0 .../web/public}/data/zip-ranges/363.json | 0 .../web/public}/data/zip-ranges/364.json | 0 .../web/public}/data/zip-ranges/365.json | 0 .../web/public}/data/zip-ranges/366.json | 0 .../web/public}/data/zip-ranges/367.json | 0 .../web/public}/data/zip-ranges/368.json | 0 .../web/public}/data/zip-ranges/369.json | 0 .../web/public}/data/zip-ranges/400.json | 0 .../web/public}/data/zip-ranges/401.json | 0 .../web/public}/data/zip-ranges/402.json | 0 .../web/public}/data/zip-ranges/403.json | 0 .../web/public}/data/zip-ranges/404.json | 0 .../web/public}/data/zip-ranges/406.json | 0 .../web/public}/data/zip-ranges/407.json | 0 .../web/public}/data/zip-ranges/408.json | 0 .../web/public}/data/zip-ranges/411.json | 0 .../web/public}/data/zip-ranges/412.json | 0 .../web/public}/data/zip-ranges/413.json | 0 .../web/public}/data/zip-ranges/414.json | 0 .../web/public}/data/zip-ranges/420.json | 0 .../web/public}/data/zip-ranges/421.json | 0 .../web/public}/data/zip-ranges/422.json | 0 .../web/public}/data/zip-ranges/423.json | 0 .../web/public}/data/zip-ranges/424.json | 0 .../web/public}/data/zip-ranges/426.json | 0 .../web/public}/data/zip-ranges/427.json | 0 .../web/public}/data/zip-ranges/428.json | 0 .../web/public}/data/zip-ranges/429.json | 0 .../web/public}/data/zip-ranges/432.json | 0 .../web/public}/data/zip-ranges/433.json | 0 .../web/public}/data/zip-ranges/434.json | 0 .../web/public}/data/zip-ranges/435.json | 0 .../web/public}/data/zip-ranges/436.json | 0 .../web/public}/data/zip-ranges/437.json | 0 .../web/public}/data/zip-ranges/438.json | 0 .../web/public}/data/zip-ranges/439.json | 0 .../web/public}/data/zip-ranges/500.json | 0 .../web/public}/data/zip-ranges/502.json | 0 .../web/public}/data/zip-ranges/503.json | 0 .../web/public}/data/zip-ranges/504.json | 0 .../web/public}/data/zip-ranges/505.json | 0 .../web/public}/data/zip-ranges/506.json | 0 .../web/public}/data/zip-ranges/507.json | 0 .../web/public}/data/zip-ranges/508.json | 0 .../web/public}/data/zip-ranges/509.json | 0 .../web/public}/data/zip-ranges/510.json | 0 .../web/public}/data/zip-ranges/511.json | 0 .../web/public}/data/zip-ranges/512.json | 0 .../web/public}/data/zip-ranges/513.json | 0 .../web/public}/data/zip-ranges/514.json | 0 .../web/public}/data/zip-ranges/515.json | 0 .../web/public}/data/zip-ranges/516.json | 0 .../web/public}/data/zip-ranges/520.json | 0 .../web/public}/data/zip-ranges/521.json | 0 .../web/public}/data/zip-ranges/522.json | 0 .../web/public}/data/zip-ranges/523.json | 0 .../web/public}/data/zip-ranges/524.json | 0 .../web/public}/data/zip-ranges/525.json | 0 .../web/public}/data/zip-ranges/526.json | 0 .../web/public}/data/zip-ranges/527.json | 0 .../web/public}/data/zip-ranges/528.json | 0 .../web/public}/data/zip-ranges/530.json | 0 .../web/public}/data/zip-ranges/540.json | 0 .../web/public}/data/zip-ranges/541.json | 0 .../web/public}/data/zip-ranges/542.json | 0 .../web/public}/data/zip-ranges/544.json | 0 .../web/public}/data/zip-ranges/545.json | 0 .../web/public}/data/zip-ranges/546.json | 0 .../web/public}/data/zip-ranges/551.json | 0 .../web/public}/data/zip-ranges/552.json | 0 .../web/public}/data/zip-ranges/553.json | 0 .../web/public}/data/zip-ranges/555.json | 0 .../web/public}/data/zip-ranges/556.json | 0 .../web/public}/data/zip-ranges/557.json | 0 .../web/public}/data/zip-ranges/558.json | 0 .../web/public}/data/zip-ranges/600.json | 0 .../web/public}/data/zip-ranges/601.json | 0 .../web/public}/data/zip-ranges/602.json | 0 .../web/public}/data/zip-ranges/603.json | 0 .../web/public}/data/zip-ranges/604.json | 0 .../web/public}/data/zip-ranges/605.json | 0 .../web/public}/data/zip-ranges/606.json | 0 .../web/public}/data/zip-ranges/607.json | 0 .../web/public}/data/zip-ranges/608.json | 0 .../web/public}/data/zip-ranges/611.json | 0 .../web/public}/data/zip-ranges/612.json | 0 .../web/public}/data/zip-ranges/613.json | 0 .../web/public}/data/zip-ranges/614.json | 0 .../web/public}/data/zip-ranges/615.json | 0 .../web/public}/data/zip-ranges/616.json | 0 .../web/public}/data/zip-ranges/621.json | 0 .../web/public}/data/zip-ranges/622.json | 0 .../web/public}/data/zip-ranges/623.json | 0 .../web/public}/data/zip-ranges/624.json | 0 .../web/public}/data/zip-ranges/625.json | 0 .../web/public}/data/zip-ranges/630.json | 0 .../web/public}/data/zip-ranges/631.json | 0 .../web/public}/data/zip-ranges/632.json | 0 .../web/public}/data/zip-ranges/633.json | 0 .../web/public}/data/zip-ranges/634.json | 0 .../web/public}/data/zip-ranges/635.json | 0 .../web/public}/data/zip-ranges/636.json | 0 .../web/public}/data/zip-ranges/637.json | 0 .../web/public}/data/zip-ranges/638.json | 0 .../web/public}/data/zip-ranges/640.json | 0 .../web/public}/data/zip-ranges/643.json | 0 .../web/public}/data/zip-ranges/646.json | 0 .../web/public}/data/zip-ranges/647.json | 0 .../web/public}/data/zip-ranges/648.json | 0 .../web/public}/data/zip-ranges/649.json | 0 .../web/public}/data/zip-ranges/651.json | 0 .../web/public}/data/zip-ranges/652.json | 0 .../web/public}/data/zip-ranges/653.json | 0 .../web/public}/data/zip-ranges/654.json | 0 .../web/public}/data/zip-ranges/655.json | 0 .../web/public}/data/zip-ranges/700.json | 0 .../web/public}/data/zip-ranges/701.json | 0 .../web/public}/data/zip-ranges/702.json | 0 .../web/public}/data/zip-ranges/704.json | 0 .../web/public}/data/zip-ranges/708.json | 0 .../web/public}/data/zip-ranges/709.json | 0 .../web/public}/data/zip-ranges/710.json | 0 .../web/public}/data/zip-ranges/711.json | 0 .../web/public}/data/zip-ranges/712.json | 0 .../web/public}/data/zip-ranges/713.json | 0 .../web/public}/data/zip-ranges/714.json | 0 .../web/public}/data/zip-ranges/715.json | 0 .../web/public}/data/zip-ranges/716.json | 0 .../web/public}/data/zip-ranges/717.json | 0 .../web/public}/data/zip-ranges/718.json | 0 .../web/public}/data/zip-ranges/719.json | 0 .../web/public}/data/zip-ranges/720.json | 0 .../web/public}/data/zip-ranges/721.json | 0 .../web/public}/data/zip-ranges/722.json | 0 .../web/public}/data/zip-ranges/723.json | 0 .../web/public}/data/zip-ranges/724.json | 0 .../web/public}/data/zip-ranges/725.json | 0 .../web/public}/data/zip-ranges/726.json | 0 .../web/public}/data/zip-ranges/727.json | 0 .../web/public}/data/zip-ranges/730.json | 0 .../web/public}/data/zip-ranges/731.json | 0 .../web/public}/data/zip-ranges/732.json | 0 .../web/public}/data/zip-ranges/733.json | 0 .../web/public}/data/zip-ranges/734.json | 0 .../web/public}/data/zip-ranges/735.json | 0 .../web/public}/data/zip-ranges/736.json | 0 .../web/public}/data/zip-ranges/737.json | 0 .../web/public}/data/zip-ranges/741.json | 0 .../web/public}/data/zip-ranges/742.json | 0 .../web/public}/data/zip-ranges/743.json | 0 .../web/public}/data/zip-ranges/744.json | 0 .../web/public}/data/zip-ranges/745.json | 0 .../web/public}/data/zip-ranges/800.json | 0 .../web/public}/data/zip-ranges/801.json | 0 .../web/public}/data/zip-ranges/802.json | 0 .../web/public}/data/zip-ranges/803.json | 0 .../web/public}/data/zip-ranges/804.json | 0 .../web/public}/data/zip-ranges/805.json | 0 .../web/public}/data/zip-ranges/806.json | 0 .../web/public}/data/zip-ranges/807.json | 0 .../web/public}/data/zip-ranges/811.json | 0 .../web/public}/data/zip-ranges/812.json | 0 .../web/public}/data/zip-ranges/813.json | 0 .../web/public}/data/zip-ranges/814.json | 0 .../web/public}/data/zip-ranges/815.json | 0 .../web/public}/data/zip-ranges/817.json | 0 .../web/public}/data/zip-ranges/819.json | 0 .../web/public}/data/zip-ranges/820.json | 0 .../web/public}/data/zip-ranges/821.json | 0 .../web/public}/data/zip-ranges/822.json | 0 .../web/public}/data/zip-ranges/823.json | 0 .../web/public}/data/zip-ranges/824.json | 0 .../web/public}/data/zip-ranges/825.json | 0 .../web/public}/data/zip-ranges/826.json | 0 .../web/public}/data/zip-ranges/827.json | 0 .../web/public}/data/zip-ranges/828.json | 0 .../web/public}/data/zip-ranges/829.json | 0 .../web/public}/data/zip-ranges/830.json | 0 .../web/public}/data/zip-ranges/831.json | 0 .../web/public}/data/zip-ranges/832.json | 0 .../web/public}/data/zip-ranges/833.json | 0 .../web/public}/data/zip-ranges/840.json | 0 .../web/public}/data/zip-ranges/842.json | 0 .../web/public}/data/zip-ranges/843.json | 0 .../web/public}/data/zip-ranges/844.json | 0 .../web/public}/data/zip-ranges/845.json | 0 .../web/public}/data/zip-ranges/846.json | 0 .../web/public}/data/zip-ranges/847.json | 0 .../web/public}/data/zip-ranges/848.json | 0 .../web/public}/data/zip-ranges/849.json | 0 .../web/public}/data/zip-ranges/851.json | 0 .../web/public}/data/zip-ranges/852.json | 0 .../web/public}/data/zip-ranges/880.json | 0 .../web/public}/data/zip-ranges/881.json | 0 .../web/public}/data/zip-ranges/882.json | 0 .../web/public}/data/zip-ranges/883.json | 0 .../web/public}/data/zip-ranges/884.json | 0 .../web/public}/data/zip-ranges/885.json | 0 .../web/public}/data/zip-ranges/890.json | 0 .../web/public}/data/zip-ranges/891.json | 0 .../web/public}/data/zip-ranges/892.json | 0 .../web/public}/data/zip-ranges/893.json | 0 .../web/public}/data/zip-ranges/894.json | 0 .../web/public}/data/zip-ranges/896.json | 0 .../web/public}/data/zip-ranges/900.json | 0 .../web/public}/data/zip-ranges/901.json | 0 .../web/public}/data/zip-ranges/902.json | 0 .../web/public}/data/zip-ranges/903.json | 0 .../web/public}/data/zip-ranges/904.json | 0 .../web/public}/data/zip-ranges/905.json | 0 .../web/public}/data/zip-ranges/906.json | 0 .../web/public}/data/zip-ranges/907.json | 0 .../web/public}/data/zip-ranges/908.json | 0 .../web/public}/data/zip-ranges/909.json | 0 .../web/public}/data/zip-ranges/911.json | 0 .../web/public}/data/zip-ranges/912.json | 0 .../web/public}/data/zip-ranges/913.json | 0 .../web/public}/data/zip-ranges/920.json | 0 .../web/public}/data/zip-ranges/921.json | 0 .../web/public}/data/zip-ranges/922.json | 0 .../web/public}/data/zip-ranges/923.json | 0 .../web/public}/data/zip-ranges/924.json | 0 .../web/public}/data/zip-ranges/925.json | 0 .../web/public}/data/zip-ranges/926.json | 0 .../web/public}/data/zip-ranges/927.json | 0 .../web/public}/data/zip-ranges/928.json | 0 .../web/public}/data/zip-ranges/929.json | 0 .../web/public}/data/zip-ranges/931.json | 0 .../web/public}/data/zip-ranges/932.json | 0 .../web/public}/data/zip-ranges/940.json | 0 .../web/public}/data/zip-ranges/941.json | 0 .../web/public}/data/zip-ranges/942.json | 0 .../web/public}/data/zip-ranges/943.json | 0 .../web/public}/data/zip-ranges/944.json | 0 .../web/public}/data/zip-ranges/945.json | 0 .../web/public}/data/zip-ranges/946.json | 0 .../web/public}/data/zip-ranges/947.json | 0 .../web/public}/data/zip-ranges/950.json | 0 .../web/public}/data/zip-ranges/951.json | 0 .../web/public}/data/zip-ranges/952.json | 0 .../web/public}/data/zip-ranges/953.json | 0 .../web/public}/data/zip-ranges/954.json | 0 .../web/public}/data/zip-ranges/955.json | 0 .../web/public}/data/zip-ranges/956.json | 0 .../web/public}/data/zip-ranges/957.json | 0 .../web/public}/data/zip-ranges/958.json | 0 .../web/public}/data/zip-ranges/959.json | 0 .../web/public}/data/zip-ranges/961.json | 0 .../web/public}/data/zip-ranges/962.json | 0 .../web/public}/data/zip-ranges/963.json | 0 .../web/public}/data/zip-ranges/964.json | 0 .../web/public}/data/zip-ranges/965.json | 0 .../web/public}/data/zip-ranges/966.json | 0 .../web/public}/data/zip-ranges/970.json | 0 .../web/public}/data/zip-ranges/971.json | 0 .../web/public}/data/zip-ranges/972.json | 0 .../web/public}/data/zip-ranges/973.json | 0 .../web/public}/data/zip-ranges/974.json | 0 .../web/public}/data/zip-ranges/975.json | 0 .../web/public}/data/zip-ranges/976.json | 0 .../web/public}/data/zip-ranges/977.json | 0 .../web/public}/data/zip-ranges/978.json | 0 .../web/public}/data/zip-ranges/979.json | 0 .../web/public}/data/zip-ranges/981.json | 0 .../web/public}/data/zip-ranges/982.json | 0 .../web/public}/data/zip-ranges/983.json | 0 {scripts => apps/web/scripts}/etl.ts | 0 .../web/scripts}/parse-address-data.ts | 0 .../web/scripts}/parse-zip-ranges.ts | 0 .../web/scripts}/process-map-styles.ts | 0 {src => apps/web/src}/app/globals.css | 0 {src => apps/web/src}/app/icon.svg | 0 {src => apps/web/src}/app/layout.tsx | 0 {src => apps/web/src}/app/manifest.ts | 0 {src => apps/web/src}/app/opengraph-image.png | Bin {src => apps/web/src}/app/page.tsx | 0 {src => apps/web/src}/app/robots.ts | 0 {src => apps/web/src}/app/sitemap.ts | 2 +- .../src}/app/tw/[city]/[district]/page.tsx | 2 +- .../src}/components/address-detail-inputs.tsx | 2 +- .../web/src}/components/address-form.tsx | 2 +- .../web/src}/components/address-page.tsx | 2 +- .../web/src}/components/city-select.tsx | 2 +- .../web/src}/components/custom/input.tsx | 0 .../web/src}/components/custom/map.tsx | 0 .../web/src}/components/custom/select.tsx | 0 .../web/src}/components/district-select.tsx | 2 +- {src => apps/web/src}/components/icons.tsx | 0 .../web/src}/components/mode-toggle.tsx | 0 .../web/src}/components/result-card.tsx | 0 .../web/src}/components/road-combobox.tsx | 2 +- .../web/src}/components/taiwan-map.tsx | 2 +- .../web/src}/components/theme-provider.tsx | 0 .../web/src}/components/ui/button.tsx | 0 {src => apps/web/src}/components/ui/card.tsx | 0 .../web/src}/components/ui/combobox.tsx | 0 .../web/src}/components/ui/command.tsx | 0 .../web/src}/components/ui/dialog.tsx | 0 .../web/src}/components/ui/input-group.tsx | 0 {src => apps/web/src}/components/ui/input.tsx | 0 {src => apps/web/src}/components/ui/map.tsx | 0 .../web/src}/components/ui/popover.tsx | 0 .../web/src}/components/ui/select.tsx | 0 .../web/src}/components/ui/sonner.tsx | 0 .../web/src}/components/ui/textarea.tsx | 0 .../web/src}/hooks/use-address-state.ts | 9 +-- {src => apps/web/src}/lib/data-loader.ts | 2 +- {src => apps/web/src}/lib/map-data-loader.ts | 0 {src => apps/web/src}/lib/map-proxy.ts | 0 {src => apps/web/src}/lib/map-utils.ts | 0 {src => apps/web/src}/lib/slug.ts | 0 {src => apps/web/src}/lib/utils.ts | 0 tsconfig.json => apps/web/tsconfig.json | 0 package.json | 52 +++--------------- packages/core/package.json | 20 +++++++ .../core/src}/format-english-address.ts | 0 packages/core/src/index.ts | 3 + .../core/src}/lookup-zipcode.ts | 0 {src/lib => packages/core/src}/types.ts | 0 packages/core/tsconfig.json | 15 +++++ pnpm-lock.yaml | 34 +++++++----- pnpm-workspace.yaml | 4 ++ 807 files changed, 143 insertions(+), 83 deletions(-) rename components.json => apps/web/components.json (100%) rename eslint.config.mjs => apps/web/eslint.config.mjs (100%) rename next.config.ts => apps/web/next.config.ts (92%) create mode 100644 apps/web/package.json rename postcss.config.mjs => apps/web/postcss.config.mjs (100%) rename {public => apps/web/public}/data/base.json (100%) rename {public => apps/web/public}/data/map/counties-10t.json (100%) rename {public => apps/web/public}/data/map/towns-10t.json (100%) rename {public => apps/web/public}/data/roads/100.json (100%) rename {public => apps/web/public}/data/roads/103.json (100%) rename {public => apps/web/public}/data/roads/104.json (100%) rename {public => apps/web/public}/data/roads/105.json (100%) rename {public => apps/web/public}/data/roads/106.json (100%) rename {public => apps/web/public}/data/roads/108.json (100%) rename {public => apps/web/public}/data/roads/110.json (100%) rename {public => apps/web/public}/data/roads/111.json (100%) rename {public => apps/web/public}/data/roads/112.json (100%) rename {public => apps/web/public}/data/roads/114.json (100%) rename {public => apps/web/public}/data/roads/115.json (100%) rename {public => apps/web/public}/data/roads/116.json (100%) rename {public => apps/web/public}/data/roads/200.json (100%) rename {public => apps/web/public}/data/roads/201.json (100%) rename {public => apps/web/public}/data/roads/202.json (100%) rename {public => apps/web/public}/data/roads/203.json (100%) rename {public => apps/web/public}/data/roads/204.json (100%) rename {public => apps/web/public}/data/roads/205.json (100%) rename {public => apps/web/public}/data/roads/206.json (100%) rename {public => apps/web/public}/data/roads/207.json (100%) rename {public => apps/web/public}/data/roads/208.json (100%) rename {public => apps/web/public}/data/roads/209.json (100%) rename {public => apps/web/public}/data/roads/210.json (100%) rename {public => apps/web/public}/data/roads/211.json (100%) rename {public => apps/web/public}/data/roads/212.json (100%) rename {public => apps/web/public}/data/roads/220.json (100%) rename {public => apps/web/public}/data/roads/221.json (100%) rename {public => apps/web/public}/data/roads/222.json (100%) rename {public => apps/web/public}/data/roads/223.json (100%) rename {public => apps/web/public}/data/roads/224.json (100%) rename {public => apps/web/public}/data/roads/226.json (100%) rename {public => apps/web/public}/data/roads/227.json (100%) rename {public => apps/web/public}/data/roads/228.json (100%) rename {public => apps/web/public}/data/roads/231.json (100%) rename {public => apps/web/public}/data/roads/232.json (100%) rename {public => apps/web/public}/data/roads/233.json (100%) rename {public => apps/web/public}/data/roads/234.json (100%) rename {public => apps/web/public}/data/roads/235.json (100%) rename {public => apps/web/public}/data/roads/236.json (100%) rename {public => apps/web/public}/data/roads/237.json (100%) rename {public => apps/web/public}/data/roads/238.json (100%) rename {public => apps/web/public}/data/roads/239.json (100%) rename {public => apps/web/public}/data/roads/241.json (100%) rename {public => apps/web/public}/data/roads/242.json (100%) rename {public => apps/web/public}/data/roads/243.json (100%) rename {public => apps/web/public}/data/roads/244.json (100%) rename {public => apps/web/public}/data/roads/247.json (100%) rename {public => apps/web/public}/data/roads/248.json (100%) rename {public => apps/web/public}/data/roads/249.json (100%) rename {public => apps/web/public}/data/roads/251.json (100%) rename {public => apps/web/public}/data/roads/252.json (100%) rename {public => apps/web/public}/data/roads/253.json (100%) rename {public => apps/web/public}/data/roads/260.json (100%) rename {public => apps/web/public}/data/roads/261.json (100%) rename {public => apps/web/public}/data/roads/262.json (100%) rename {public => apps/web/public}/data/roads/263.json (100%) rename {public => apps/web/public}/data/roads/264.json (100%) rename {public => apps/web/public}/data/roads/265.json (100%) rename {public => apps/web/public}/data/roads/266.json (100%) rename {public => apps/web/public}/data/roads/267.json (100%) rename {public => apps/web/public}/data/roads/268.json (100%) rename {public => apps/web/public}/data/roads/269.json (100%) rename {public => apps/web/public}/data/roads/270.json (100%) rename {public => apps/web/public}/data/roads/272.json (100%) rename {public => apps/web/public}/data/roads/290.json (100%) rename {public => apps/web/public}/data/roads/300.json (100%) rename {public => apps/web/public}/data/roads/302.json (100%) rename {public => apps/web/public}/data/roads/303.json (100%) rename {public => apps/web/public}/data/roads/304.json (100%) rename {public => apps/web/public}/data/roads/305.json (100%) rename {public => apps/web/public}/data/roads/306.json (100%) rename {public => apps/web/public}/data/roads/307.json (100%) rename {public => apps/web/public}/data/roads/308.json (100%) rename {public => apps/web/public}/data/roads/310.json (100%) rename {public => apps/web/public}/data/roads/311.json (100%) rename {public => apps/web/public}/data/roads/312.json (100%) rename {public => apps/web/public}/data/roads/313.json (100%) rename {public => apps/web/public}/data/roads/314.json (100%) rename {public => apps/web/public}/data/roads/315.json (100%) rename {public => apps/web/public}/data/roads/320.json (100%) rename {public => apps/web/public}/data/roads/324.json (100%) rename {public => apps/web/public}/data/roads/325.json (100%) rename {public => apps/web/public}/data/roads/326.json (100%) rename {public => apps/web/public}/data/roads/327.json (100%) rename {public => apps/web/public}/data/roads/328.json (100%) rename {public => apps/web/public}/data/roads/330.json (100%) rename {public => apps/web/public}/data/roads/333.json (100%) rename {public => apps/web/public}/data/roads/334.json (100%) rename {public => apps/web/public}/data/roads/335.json (100%) rename {public => apps/web/public}/data/roads/336.json (100%) rename {public => apps/web/public}/data/roads/337.json (100%) rename {public => apps/web/public}/data/roads/338.json (100%) rename {public => apps/web/public}/data/roads/350.json (100%) rename {public => apps/web/public}/data/roads/351.json (100%) rename {public => apps/web/public}/data/roads/352.json (100%) rename {public => apps/web/public}/data/roads/353.json (100%) rename {public => apps/web/public}/data/roads/354.json (100%) rename {public => apps/web/public}/data/roads/356.json (100%) rename {public => apps/web/public}/data/roads/357.json (100%) rename {public => apps/web/public}/data/roads/358.json (100%) rename {public => apps/web/public}/data/roads/360.json (100%) rename {public => apps/web/public}/data/roads/361.json (100%) rename {public => apps/web/public}/data/roads/362.json (100%) rename {public => apps/web/public}/data/roads/363.json (100%) rename {public => apps/web/public}/data/roads/364.json (100%) rename {public => apps/web/public}/data/roads/365.json (100%) rename {public => apps/web/public}/data/roads/366.json (100%) rename {public => apps/web/public}/data/roads/367.json (100%) rename {public => apps/web/public}/data/roads/368.json (100%) rename {public => apps/web/public}/data/roads/369.json (100%) rename {public => apps/web/public}/data/roads/400.json (100%) rename {public => apps/web/public}/data/roads/401.json (100%) rename {public => apps/web/public}/data/roads/402.json (100%) rename {public => apps/web/public}/data/roads/403.json (100%) rename {public => apps/web/public}/data/roads/404.json (100%) rename {public => apps/web/public}/data/roads/406.json (100%) rename {public => apps/web/public}/data/roads/407.json (100%) rename {public => apps/web/public}/data/roads/408.json (100%) rename {public => apps/web/public}/data/roads/411.json (100%) rename {public => apps/web/public}/data/roads/412.json (100%) rename {public => apps/web/public}/data/roads/413.json (100%) rename {public => apps/web/public}/data/roads/414.json (100%) rename {public => apps/web/public}/data/roads/420.json (100%) rename {public => apps/web/public}/data/roads/421.json (100%) rename {public => apps/web/public}/data/roads/422.json (100%) rename {public => apps/web/public}/data/roads/423.json (100%) rename {public => apps/web/public}/data/roads/424.json (100%) rename {public => apps/web/public}/data/roads/426.json (100%) rename {public => apps/web/public}/data/roads/427.json (100%) rename {public => apps/web/public}/data/roads/428.json (100%) rename {public => apps/web/public}/data/roads/429.json (100%) rename {public => apps/web/public}/data/roads/432.json (100%) rename {public => apps/web/public}/data/roads/433.json (100%) rename {public => apps/web/public}/data/roads/434.json (100%) rename {public => apps/web/public}/data/roads/435.json (100%) rename {public => apps/web/public}/data/roads/436.json (100%) rename {public => apps/web/public}/data/roads/437.json (100%) rename {public => apps/web/public}/data/roads/438.json (100%) rename {public => apps/web/public}/data/roads/439.json (100%) rename {public => apps/web/public}/data/roads/500.json (100%) rename {public => apps/web/public}/data/roads/502.json (100%) rename {public => apps/web/public}/data/roads/503.json (100%) rename {public => apps/web/public}/data/roads/504.json (100%) rename {public => apps/web/public}/data/roads/505.json (100%) rename {public => apps/web/public}/data/roads/506.json (100%) rename {public => apps/web/public}/data/roads/507.json (100%) rename {public => apps/web/public}/data/roads/508.json (100%) rename {public => apps/web/public}/data/roads/509.json (100%) rename {public => apps/web/public}/data/roads/510.json (100%) rename {public => apps/web/public}/data/roads/511.json (100%) rename {public => apps/web/public}/data/roads/512.json (100%) rename {public => apps/web/public}/data/roads/513.json (100%) rename {public => apps/web/public}/data/roads/514.json (100%) rename {public => apps/web/public}/data/roads/515.json (100%) rename {public => apps/web/public}/data/roads/516.json (100%) rename {public => apps/web/public}/data/roads/520.json (100%) rename {public => apps/web/public}/data/roads/521.json (100%) rename {public => apps/web/public}/data/roads/522.json (100%) rename {public => apps/web/public}/data/roads/523.json (100%) rename {public => apps/web/public}/data/roads/524.json (100%) rename {public => apps/web/public}/data/roads/525.json (100%) rename {public => apps/web/public}/data/roads/526.json (100%) rename {public => apps/web/public}/data/roads/527.json (100%) rename {public => apps/web/public}/data/roads/528.json (100%) rename {public => apps/web/public}/data/roads/530.json (100%) rename {public => apps/web/public}/data/roads/540.json (100%) rename {public => apps/web/public}/data/roads/541.json (100%) rename {public => apps/web/public}/data/roads/542.json (100%) rename {public => apps/web/public}/data/roads/544.json (100%) rename {public => apps/web/public}/data/roads/545.json (100%) rename {public => apps/web/public}/data/roads/546.json (100%) rename {public => apps/web/public}/data/roads/551.json (100%) rename {public => apps/web/public}/data/roads/552.json (100%) rename {public => apps/web/public}/data/roads/553.json (100%) rename {public => apps/web/public}/data/roads/555.json (100%) rename {public => apps/web/public}/data/roads/556.json (100%) rename {public => apps/web/public}/data/roads/557.json (100%) rename {public => apps/web/public}/data/roads/558.json (100%) rename {public => apps/web/public}/data/roads/600.json (100%) rename {public => apps/web/public}/data/roads/602.json (100%) rename {public => apps/web/public}/data/roads/603.json (100%) rename {public => apps/web/public}/data/roads/604.json (100%) rename {public => apps/web/public}/data/roads/605.json (100%) rename {public => apps/web/public}/data/roads/606.json (100%) rename {public => apps/web/public}/data/roads/607.json (100%) rename {public => apps/web/public}/data/roads/608.json (100%) rename {public => apps/web/public}/data/roads/611.json (100%) rename {public => apps/web/public}/data/roads/612.json (100%) rename {public => apps/web/public}/data/roads/613.json (100%) rename {public => apps/web/public}/data/roads/614.json (100%) rename {public => apps/web/public}/data/roads/615.json (100%) rename {public => apps/web/public}/data/roads/616.json (100%) rename {public => apps/web/public}/data/roads/621.json (100%) rename {public => apps/web/public}/data/roads/622.json (100%) rename {public => apps/web/public}/data/roads/623.json (100%) rename {public => apps/web/public}/data/roads/624.json (100%) rename {public => apps/web/public}/data/roads/625.json (100%) rename {public => apps/web/public}/data/roads/630.json (100%) rename {public => apps/web/public}/data/roads/631.json (100%) rename {public => apps/web/public}/data/roads/632.json (100%) rename {public => apps/web/public}/data/roads/633.json (100%) rename {public => apps/web/public}/data/roads/634.json (100%) rename {public => apps/web/public}/data/roads/635.json (100%) rename {public => apps/web/public}/data/roads/636.json (100%) rename {public => apps/web/public}/data/roads/637.json (100%) rename {public => apps/web/public}/data/roads/638.json (100%) rename {public => apps/web/public}/data/roads/640.json (100%) rename {public => apps/web/public}/data/roads/643.json (100%) rename {public => apps/web/public}/data/roads/646.json (100%) rename {public => apps/web/public}/data/roads/647.json (100%) rename {public => apps/web/public}/data/roads/648.json (100%) rename {public => apps/web/public}/data/roads/649.json (100%) rename {public => apps/web/public}/data/roads/651.json (100%) rename {public => apps/web/public}/data/roads/652.json (100%) rename {public => apps/web/public}/data/roads/653.json (100%) rename {public => apps/web/public}/data/roads/654.json (100%) rename {public => apps/web/public}/data/roads/655.json (100%) rename {public => apps/web/public}/data/roads/700.json (100%) rename {public => apps/web/public}/data/roads/701.json (100%) rename {public => apps/web/public}/data/roads/702.json (100%) rename {public => apps/web/public}/data/roads/704.json (100%) rename {public => apps/web/public}/data/roads/708.json (100%) rename {public => apps/web/public}/data/roads/709.json (100%) rename {public => apps/web/public}/data/roads/710.json (100%) rename {public => apps/web/public}/data/roads/711.json (100%) rename {public => apps/web/public}/data/roads/712.json (100%) rename {public => apps/web/public}/data/roads/713.json (100%) rename {public => apps/web/public}/data/roads/714.json (100%) rename {public => apps/web/public}/data/roads/715.json (100%) rename {public => apps/web/public}/data/roads/716.json (100%) rename {public => apps/web/public}/data/roads/717.json (100%) rename {public => apps/web/public}/data/roads/718.json (100%) rename {public => apps/web/public}/data/roads/719.json (100%) rename {public => apps/web/public}/data/roads/720.json (100%) rename {public => apps/web/public}/data/roads/721.json (100%) rename {public => apps/web/public}/data/roads/722.json (100%) rename {public => apps/web/public}/data/roads/723.json (100%) rename {public => apps/web/public}/data/roads/724.json (100%) rename {public => apps/web/public}/data/roads/725.json (100%) rename {public => apps/web/public}/data/roads/726.json (100%) rename {public => apps/web/public}/data/roads/727.json (100%) rename {public => apps/web/public}/data/roads/730.json (100%) rename {public => apps/web/public}/data/roads/731.json (100%) rename {public => apps/web/public}/data/roads/732.json (100%) rename {public => apps/web/public}/data/roads/733.json (100%) rename {public => apps/web/public}/data/roads/734.json (100%) rename {public => apps/web/public}/data/roads/735.json (100%) rename {public => apps/web/public}/data/roads/736.json (100%) rename {public => apps/web/public}/data/roads/737.json (100%) rename {public => apps/web/public}/data/roads/741.json (100%) rename {public => apps/web/public}/data/roads/742.json (100%) rename {public => apps/web/public}/data/roads/743.json (100%) rename {public => apps/web/public}/data/roads/744.json (100%) rename {public => apps/web/public}/data/roads/745.json (100%) rename {public => apps/web/public}/data/roads/800.json (100%) rename {public => apps/web/public}/data/roads/801.json (100%) rename {public => apps/web/public}/data/roads/802.json (100%) rename {public => apps/web/public}/data/roads/803.json (100%) rename {public => apps/web/public}/data/roads/804.json (100%) rename {public => apps/web/public}/data/roads/805.json (100%) rename {public => apps/web/public}/data/roads/806.json (100%) rename {public => apps/web/public}/data/roads/807.json (100%) rename {public => apps/web/public}/data/roads/811.json (100%) rename {public => apps/web/public}/data/roads/812.json (100%) rename {public => apps/web/public}/data/roads/813.json (100%) rename {public => apps/web/public}/data/roads/814.json (100%) rename {public => apps/web/public}/data/roads/815.json (100%) rename {public => apps/web/public}/data/roads/817.json (100%) rename {public => apps/web/public}/data/roads/819.json (100%) rename {public => apps/web/public}/data/roads/820.json (100%) rename {public => apps/web/public}/data/roads/821.json (100%) rename {public => apps/web/public}/data/roads/822.json (100%) rename {public => apps/web/public}/data/roads/823.json (100%) rename {public => apps/web/public}/data/roads/824.json (100%) rename {public => apps/web/public}/data/roads/825.json (100%) rename {public => apps/web/public}/data/roads/826.json (100%) rename {public => apps/web/public}/data/roads/827.json (100%) rename {public => apps/web/public}/data/roads/828.json (100%) rename {public => apps/web/public}/data/roads/829.json (100%) rename {public => apps/web/public}/data/roads/830.json (100%) rename {public => apps/web/public}/data/roads/831.json (100%) rename {public => apps/web/public}/data/roads/832.json (100%) rename {public => apps/web/public}/data/roads/833.json (100%) rename {public => apps/web/public}/data/roads/840.json (100%) rename {public => apps/web/public}/data/roads/842.json (100%) rename {public => apps/web/public}/data/roads/843.json (100%) rename {public => apps/web/public}/data/roads/844.json (100%) rename {public => apps/web/public}/data/roads/845.json (100%) rename {public => apps/web/public}/data/roads/846.json (100%) rename {public => apps/web/public}/data/roads/847.json (100%) rename {public => apps/web/public}/data/roads/848.json (100%) rename {public => apps/web/public}/data/roads/849.json (100%) rename {public => apps/web/public}/data/roads/851.json (100%) rename {public => apps/web/public}/data/roads/852.json (100%) rename {public => apps/web/public}/data/roads/880.json (100%) rename {public => apps/web/public}/data/roads/881.json (100%) rename {public => apps/web/public}/data/roads/882.json (100%) rename {public => apps/web/public}/data/roads/883.json (100%) rename {public => apps/web/public}/data/roads/884.json (100%) rename {public => apps/web/public}/data/roads/885.json (100%) rename {public => apps/web/public}/data/roads/890.json (100%) rename {public => apps/web/public}/data/roads/891.json (100%) rename {public => apps/web/public}/data/roads/892.json (100%) rename {public => apps/web/public}/data/roads/893.json (100%) rename {public => apps/web/public}/data/roads/894.json (100%) rename {public => apps/web/public}/data/roads/896.json (100%) rename {public => apps/web/public}/data/roads/900.json (100%) rename {public => apps/web/public}/data/roads/901.json (100%) rename {public => apps/web/public}/data/roads/902.json (100%) rename {public => apps/web/public}/data/roads/903.json (100%) rename {public => apps/web/public}/data/roads/904.json (100%) rename {public => apps/web/public}/data/roads/905.json (100%) rename {public => apps/web/public}/data/roads/906.json (100%) rename {public => apps/web/public}/data/roads/907.json (100%) rename {public => apps/web/public}/data/roads/908.json (100%) rename {public => apps/web/public}/data/roads/909.json (100%) rename {public => apps/web/public}/data/roads/911.json (100%) rename {public => apps/web/public}/data/roads/912.json (100%) rename {public => apps/web/public}/data/roads/913.json (100%) rename {public => apps/web/public}/data/roads/920.json (100%) rename {public => apps/web/public}/data/roads/921.json (100%) rename {public => apps/web/public}/data/roads/922.json (100%) rename {public => apps/web/public}/data/roads/923.json (100%) rename {public => apps/web/public}/data/roads/924.json (100%) rename {public => apps/web/public}/data/roads/925.json (100%) rename {public => apps/web/public}/data/roads/926.json (100%) rename {public => apps/web/public}/data/roads/927.json (100%) rename {public => apps/web/public}/data/roads/928.json (100%) rename {public => apps/web/public}/data/roads/929.json (100%) rename {public => apps/web/public}/data/roads/931.json (100%) rename {public => apps/web/public}/data/roads/932.json (100%) rename {public => apps/web/public}/data/roads/940.json (100%) rename {public => apps/web/public}/data/roads/941.json (100%) rename {public => apps/web/public}/data/roads/942.json (100%) rename {public => apps/web/public}/data/roads/943.json (100%) rename {public => apps/web/public}/data/roads/944.json (100%) rename {public => apps/web/public}/data/roads/945.json (100%) rename {public => apps/web/public}/data/roads/946.json (100%) rename {public => apps/web/public}/data/roads/947.json (100%) rename {public => apps/web/public}/data/roads/950.json (100%) rename {public => apps/web/public}/data/roads/951.json (100%) rename {public => apps/web/public}/data/roads/952.json (100%) rename {public => apps/web/public}/data/roads/953.json (100%) rename {public => apps/web/public}/data/roads/954.json (100%) rename {public => apps/web/public}/data/roads/955.json (100%) rename {public => apps/web/public}/data/roads/956.json (100%) rename {public => apps/web/public}/data/roads/957.json (100%) rename {public => apps/web/public}/data/roads/958.json (100%) rename {public => apps/web/public}/data/roads/959.json (100%) rename {public => apps/web/public}/data/roads/961.json (100%) rename {public => apps/web/public}/data/roads/962.json (100%) rename {public => apps/web/public}/data/roads/963.json (100%) rename {public => apps/web/public}/data/roads/964.json (100%) rename {public => apps/web/public}/data/roads/965.json (100%) rename {public => apps/web/public}/data/roads/966.json (100%) rename {public => apps/web/public}/data/roads/970.json (100%) rename {public => apps/web/public}/data/roads/971.json (100%) rename {public => apps/web/public}/data/roads/972.json (100%) rename {public => apps/web/public}/data/roads/973.json (100%) rename {public => apps/web/public}/data/roads/974.json (100%) rename {public => apps/web/public}/data/roads/975.json (100%) rename {public => apps/web/public}/data/roads/976.json (100%) rename {public => apps/web/public}/data/roads/977.json (100%) rename {public => apps/web/public}/data/roads/978.json (100%) rename {public => apps/web/public}/data/roads/979.json (100%) rename {public => apps/web/public}/data/roads/981.json (100%) rename {public => apps/web/public}/data/roads/982.json (100%) rename {public => apps/web/public}/data/roads/983.json (100%) rename {public => apps/web/public}/data/styles/dark-matter-neutral.json (100%) rename {public => apps/web/public}/data/styles/positron-neutral.json (100%) rename {public => apps/web/public}/data/zip-ranges/100.json (100%) rename {public => apps/web/public}/data/zip-ranges/103.json (100%) rename {public => apps/web/public}/data/zip-ranges/104.json (100%) rename {public => apps/web/public}/data/zip-ranges/105.json (100%) rename {public => apps/web/public}/data/zip-ranges/106.json (100%) rename {public => apps/web/public}/data/zip-ranges/108.json (100%) rename {public => apps/web/public}/data/zip-ranges/110.json (100%) rename {public => apps/web/public}/data/zip-ranges/111.json (100%) rename {public => apps/web/public}/data/zip-ranges/112.json (100%) rename {public => apps/web/public}/data/zip-ranges/114.json (100%) rename {public => apps/web/public}/data/zip-ranges/115.json (100%) rename {public => apps/web/public}/data/zip-ranges/116.json (100%) rename {public => apps/web/public}/data/zip-ranges/200.json (100%) rename {public => apps/web/public}/data/zip-ranges/201.json (100%) rename {public => apps/web/public}/data/zip-ranges/202.json (100%) rename {public => apps/web/public}/data/zip-ranges/203.json (100%) rename {public => apps/web/public}/data/zip-ranges/204.json (100%) rename {public => apps/web/public}/data/zip-ranges/205.json (100%) rename {public => apps/web/public}/data/zip-ranges/206.json (100%) rename {public => apps/web/public}/data/zip-ranges/207.json (100%) rename {public => apps/web/public}/data/zip-ranges/208.json (100%) rename {public => apps/web/public}/data/zip-ranges/209.json (100%) rename {public => apps/web/public}/data/zip-ranges/210.json (100%) rename {public => apps/web/public}/data/zip-ranges/211.json (100%) rename {public => apps/web/public}/data/zip-ranges/212.json (100%) rename {public => apps/web/public}/data/zip-ranges/220.json (100%) rename {public => apps/web/public}/data/zip-ranges/221.json (100%) rename {public => apps/web/public}/data/zip-ranges/222.json (100%) rename {public => apps/web/public}/data/zip-ranges/223.json (100%) rename {public => apps/web/public}/data/zip-ranges/224.json (100%) rename {public => apps/web/public}/data/zip-ranges/226.json (100%) rename {public => apps/web/public}/data/zip-ranges/227.json (100%) rename {public => apps/web/public}/data/zip-ranges/228.json (100%) rename {public => apps/web/public}/data/zip-ranges/231.json (100%) rename {public => apps/web/public}/data/zip-ranges/232.json (100%) rename {public => apps/web/public}/data/zip-ranges/233.json (100%) rename {public => apps/web/public}/data/zip-ranges/234.json (100%) rename {public => apps/web/public}/data/zip-ranges/235.json (100%) rename {public => apps/web/public}/data/zip-ranges/236.json (100%) rename {public => apps/web/public}/data/zip-ranges/237.json (100%) rename {public => apps/web/public}/data/zip-ranges/238.json (100%) rename {public => apps/web/public}/data/zip-ranges/239.json (100%) rename {public => apps/web/public}/data/zip-ranges/241.json (100%) rename {public => apps/web/public}/data/zip-ranges/242.json (100%) rename {public => apps/web/public}/data/zip-ranges/243.json (100%) rename {public => apps/web/public}/data/zip-ranges/244.json (100%) rename {public => apps/web/public}/data/zip-ranges/247.json (100%) rename {public => apps/web/public}/data/zip-ranges/248.json (100%) rename {public => apps/web/public}/data/zip-ranges/249.json (100%) rename {public => apps/web/public}/data/zip-ranges/251.json (100%) rename {public => apps/web/public}/data/zip-ranges/252.json (100%) rename {public => apps/web/public}/data/zip-ranges/253.json (100%) rename {public => apps/web/public}/data/zip-ranges/260.json (100%) rename {public => apps/web/public}/data/zip-ranges/261.json (100%) rename {public => apps/web/public}/data/zip-ranges/262.json (100%) rename {public => apps/web/public}/data/zip-ranges/263.json (100%) rename {public => apps/web/public}/data/zip-ranges/264.json (100%) rename {public => apps/web/public}/data/zip-ranges/265.json (100%) rename {public => apps/web/public}/data/zip-ranges/266.json (100%) rename {public => apps/web/public}/data/zip-ranges/267.json (100%) rename {public => apps/web/public}/data/zip-ranges/268.json (100%) rename {public => apps/web/public}/data/zip-ranges/269.json (100%) rename {public => apps/web/public}/data/zip-ranges/270.json (100%) rename {public => apps/web/public}/data/zip-ranges/272.json (100%) rename {public => apps/web/public}/data/zip-ranges/290.json (100%) rename {public => apps/web/public}/data/zip-ranges/300.json (100%) rename {public => apps/web/public}/data/zip-ranges/301.json (100%) rename {public => apps/web/public}/data/zip-ranges/302.json (100%) rename {public => apps/web/public}/data/zip-ranges/303.json (100%) rename {public => apps/web/public}/data/zip-ranges/304.json (100%) rename {public => apps/web/public}/data/zip-ranges/305.json (100%) rename {public => apps/web/public}/data/zip-ranges/306.json (100%) rename {public => apps/web/public}/data/zip-ranges/307.json (100%) rename {public => apps/web/public}/data/zip-ranges/308.json (100%) rename {public => apps/web/public}/data/zip-ranges/309.json (100%) rename {public => apps/web/public}/data/zip-ranges/310.json (100%) rename {public => apps/web/public}/data/zip-ranges/311.json (100%) rename {public => apps/web/public}/data/zip-ranges/312.json (100%) rename {public => apps/web/public}/data/zip-ranges/313.json (100%) rename {public => apps/web/public}/data/zip-ranges/314.json (100%) rename {public => apps/web/public}/data/zip-ranges/315.json (100%) rename {public => apps/web/public}/data/zip-ranges/320.json (100%) rename {public => apps/web/public}/data/zip-ranges/324.json (100%) rename {public => apps/web/public}/data/zip-ranges/325.json (100%) rename {public => apps/web/public}/data/zip-ranges/326.json (100%) rename {public => apps/web/public}/data/zip-ranges/327.json (100%) rename {public => apps/web/public}/data/zip-ranges/328.json (100%) rename {public => apps/web/public}/data/zip-ranges/330.json (100%) rename {public => apps/web/public}/data/zip-ranges/333.json (100%) rename {public => apps/web/public}/data/zip-ranges/334.json (100%) rename {public => apps/web/public}/data/zip-ranges/335.json (100%) rename {public => apps/web/public}/data/zip-ranges/336.json (100%) rename {public => apps/web/public}/data/zip-ranges/337.json (100%) rename {public => apps/web/public}/data/zip-ranges/338.json (100%) rename {public => apps/web/public}/data/zip-ranges/350.json (100%) rename {public => apps/web/public}/data/zip-ranges/351.json (100%) rename {public => apps/web/public}/data/zip-ranges/352.json (100%) rename {public => apps/web/public}/data/zip-ranges/353.json (100%) rename {public => apps/web/public}/data/zip-ranges/354.json (100%) rename {public => apps/web/public}/data/zip-ranges/356.json (100%) rename {public => apps/web/public}/data/zip-ranges/357.json (100%) rename {public => apps/web/public}/data/zip-ranges/358.json (100%) rename {public => apps/web/public}/data/zip-ranges/360.json (100%) rename {public => apps/web/public}/data/zip-ranges/361.json (100%) rename {public => apps/web/public}/data/zip-ranges/362.json (100%) rename {public => apps/web/public}/data/zip-ranges/363.json (100%) rename {public => apps/web/public}/data/zip-ranges/364.json (100%) rename {public => apps/web/public}/data/zip-ranges/365.json (100%) rename {public => apps/web/public}/data/zip-ranges/366.json (100%) rename {public => apps/web/public}/data/zip-ranges/367.json (100%) rename {public => apps/web/public}/data/zip-ranges/368.json (100%) rename {public => apps/web/public}/data/zip-ranges/369.json (100%) rename {public => apps/web/public}/data/zip-ranges/400.json (100%) rename {public => apps/web/public}/data/zip-ranges/401.json (100%) rename {public => apps/web/public}/data/zip-ranges/402.json (100%) rename {public => apps/web/public}/data/zip-ranges/403.json (100%) rename {public => apps/web/public}/data/zip-ranges/404.json (100%) rename {public => apps/web/public}/data/zip-ranges/406.json (100%) rename {public => apps/web/public}/data/zip-ranges/407.json (100%) rename {public => apps/web/public}/data/zip-ranges/408.json (100%) rename {public => apps/web/public}/data/zip-ranges/411.json (100%) rename {public => apps/web/public}/data/zip-ranges/412.json (100%) rename {public => apps/web/public}/data/zip-ranges/413.json (100%) rename {public => apps/web/public}/data/zip-ranges/414.json (100%) rename {public => apps/web/public}/data/zip-ranges/420.json (100%) rename {public => apps/web/public}/data/zip-ranges/421.json (100%) rename {public => apps/web/public}/data/zip-ranges/422.json (100%) rename {public => apps/web/public}/data/zip-ranges/423.json (100%) rename {public => apps/web/public}/data/zip-ranges/424.json (100%) rename {public => apps/web/public}/data/zip-ranges/426.json (100%) rename {public => apps/web/public}/data/zip-ranges/427.json (100%) rename {public => apps/web/public}/data/zip-ranges/428.json (100%) rename {public => apps/web/public}/data/zip-ranges/429.json (100%) rename {public => apps/web/public}/data/zip-ranges/432.json (100%) rename {public => apps/web/public}/data/zip-ranges/433.json (100%) rename {public => apps/web/public}/data/zip-ranges/434.json (100%) rename {public => apps/web/public}/data/zip-ranges/435.json (100%) rename {public => apps/web/public}/data/zip-ranges/436.json (100%) rename {public => apps/web/public}/data/zip-ranges/437.json (100%) rename {public => apps/web/public}/data/zip-ranges/438.json (100%) rename {public => apps/web/public}/data/zip-ranges/439.json (100%) rename {public => apps/web/public}/data/zip-ranges/500.json (100%) rename {public => apps/web/public}/data/zip-ranges/502.json (100%) rename {public => apps/web/public}/data/zip-ranges/503.json (100%) rename {public => apps/web/public}/data/zip-ranges/504.json (100%) rename {public => apps/web/public}/data/zip-ranges/505.json (100%) rename {public => apps/web/public}/data/zip-ranges/506.json (100%) rename {public => apps/web/public}/data/zip-ranges/507.json (100%) rename {public => apps/web/public}/data/zip-ranges/508.json (100%) rename {public => apps/web/public}/data/zip-ranges/509.json (100%) rename {public => apps/web/public}/data/zip-ranges/510.json (100%) rename {public => apps/web/public}/data/zip-ranges/511.json (100%) rename {public => apps/web/public}/data/zip-ranges/512.json (100%) rename {public => apps/web/public}/data/zip-ranges/513.json (100%) rename {public => apps/web/public}/data/zip-ranges/514.json (100%) rename {public => apps/web/public}/data/zip-ranges/515.json (100%) rename {public => apps/web/public}/data/zip-ranges/516.json (100%) rename {public => apps/web/public}/data/zip-ranges/520.json (100%) rename {public => apps/web/public}/data/zip-ranges/521.json (100%) rename {public => apps/web/public}/data/zip-ranges/522.json (100%) rename {public => apps/web/public}/data/zip-ranges/523.json (100%) rename {public => apps/web/public}/data/zip-ranges/524.json (100%) rename {public => apps/web/public}/data/zip-ranges/525.json (100%) rename {public => apps/web/public}/data/zip-ranges/526.json (100%) rename {public => apps/web/public}/data/zip-ranges/527.json (100%) rename {public => apps/web/public}/data/zip-ranges/528.json (100%) rename {public => apps/web/public}/data/zip-ranges/530.json (100%) rename {public => apps/web/public}/data/zip-ranges/540.json (100%) rename {public => apps/web/public}/data/zip-ranges/541.json (100%) rename {public => apps/web/public}/data/zip-ranges/542.json (100%) rename {public => apps/web/public}/data/zip-ranges/544.json (100%) rename {public => apps/web/public}/data/zip-ranges/545.json (100%) rename {public => apps/web/public}/data/zip-ranges/546.json (100%) rename {public => apps/web/public}/data/zip-ranges/551.json (100%) rename {public => apps/web/public}/data/zip-ranges/552.json (100%) rename {public => apps/web/public}/data/zip-ranges/553.json (100%) rename {public => apps/web/public}/data/zip-ranges/555.json (100%) rename {public => apps/web/public}/data/zip-ranges/556.json (100%) rename {public => apps/web/public}/data/zip-ranges/557.json (100%) rename {public => apps/web/public}/data/zip-ranges/558.json (100%) rename {public => apps/web/public}/data/zip-ranges/600.json (100%) rename {public => apps/web/public}/data/zip-ranges/601.json (100%) rename {public => apps/web/public}/data/zip-ranges/602.json (100%) rename {public => apps/web/public}/data/zip-ranges/603.json (100%) rename {public => apps/web/public}/data/zip-ranges/604.json (100%) rename {public => apps/web/public}/data/zip-ranges/605.json (100%) rename {public => apps/web/public}/data/zip-ranges/606.json (100%) rename {public => apps/web/public}/data/zip-ranges/607.json (100%) rename {public => apps/web/public}/data/zip-ranges/608.json (100%) rename {public => apps/web/public}/data/zip-ranges/611.json (100%) rename {public => apps/web/public}/data/zip-ranges/612.json (100%) rename {public => apps/web/public}/data/zip-ranges/613.json (100%) rename {public => apps/web/public}/data/zip-ranges/614.json (100%) rename {public => apps/web/public}/data/zip-ranges/615.json (100%) rename {public => apps/web/public}/data/zip-ranges/616.json (100%) rename {public => apps/web/public}/data/zip-ranges/621.json (100%) rename {public => apps/web/public}/data/zip-ranges/622.json (100%) rename {public => apps/web/public}/data/zip-ranges/623.json (100%) rename {public => apps/web/public}/data/zip-ranges/624.json (100%) rename {public => apps/web/public}/data/zip-ranges/625.json (100%) rename {public => apps/web/public}/data/zip-ranges/630.json (100%) rename {public => apps/web/public}/data/zip-ranges/631.json (100%) rename {public => apps/web/public}/data/zip-ranges/632.json (100%) rename {public => apps/web/public}/data/zip-ranges/633.json (100%) rename {public => apps/web/public}/data/zip-ranges/634.json (100%) rename {public => apps/web/public}/data/zip-ranges/635.json (100%) rename {public => apps/web/public}/data/zip-ranges/636.json (100%) rename {public => apps/web/public}/data/zip-ranges/637.json (100%) rename {public => apps/web/public}/data/zip-ranges/638.json (100%) rename {public => apps/web/public}/data/zip-ranges/640.json (100%) rename {public => apps/web/public}/data/zip-ranges/643.json (100%) rename {public => apps/web/public}/data/zip-ranges/646.json (100%) rename {public => apps/web/public}/data/zip-ranges/647.json (100%) rename {public => apps/web/public}/data/zip-ranges/648.json (100%) rename {public => apps/web/public}/data/zip-ranges/649.json (100%) rename {public => apps/web/public}/data/zip-ranges/651.json (100%) rename {public => apps/web/public}/data/zip-ranges/652.json (100%) rename {public => apps/web/public}/data/zip-ranges/653.json (100%) rename {public => apps/web/public}/data/zip-ranges/654.json (100%) rename {public => apps/web/public}/data/zip-ranges/655.json (100%) rename {public => apps/web/public}/data/zip-ranges/700.json (100%) rename {public => apps/web/public}/data/zip-ranges/701.json (100%) rename {public => apps/web/public}/data/zip-ranges/702.json (100%) rename {public => apps/web/public}/data/zip-ranges/704.json (100%) rename {public => apps/web/public}/data/zip-ranges/708.json (100%) rename {public => apps/web/public}/data/zip-ranges/709.json (100%) rename {public => apps/web/public}/data/zip-ranges/710.json (100%) rename {public => apps/web/public}/data/zip-ranges/711.json (100%) rename {public => apps/web/public}/data/zip-ranges/712.json (100%) rename {public => apps/web/public}/data/zip-ranges/713.json (100%) rename {public => apps/web/public}/data/zip-ranges/714.json (100%) rename {public => apps/web/public}/data/zip-ranges/715.json (100%) rename {public => apps/web/public}/data/zip-ranges/716.json (100%) rename {public => apps/web/public}/data/zip-ranges/717.json (100%) rename {public => apps/web/public}/data/zip-ranges/718.json (100%) rename {public => apps/web/public}/data/zip-ranges/719.json (100%) rename {public => apps/web/public}/data/zip-ranges/720.json (100%) rename {public => apps/web/public}/data/zip-ranges/721.json (100%) rename {public => apps/web/public}/data/zip-ranges/722.json (100%) rename {public => apps/web/public}/data/zip-ranges/723.json (100%) rename {public => apps/web/public}/data/zip-ranges/724.json (100%) rename {public => apps/web/public}/data/zip-ranges/725.json (100%) rename {public => apps/web/public}/data/zip-ranges/726.json (100%) rename {public => apps/web/public}/data/zip-ranges/727.json (100%) rename {public => apps/web/public}/data/zip-ranges/730.json (100%) rename {public => apps/web/public}/data/zip-ranges/731.json (100%) rename {public => apps/web/public}/data/zip-ranges/732.json (100%) rename {public => apps/web/public}/data/zip-ranges/733.json (100%) rename {public => apps/web/public}/data/zip-ranges/734.json (100%) rename {public => apps/web/public}/data/zip-ranges/735.json (100%) rename {public => apps/web/public}/data/zip-ranges/736.json (100%) rename {public => apps/web/public}/data/zip-ranges/737.json (100%) rename {public => apps/web/public}/data/zip-ranges/741.json (100%) rename {public => apps/web/public}/data/zip-ranges/742.json (100%) rename {public => apps/web/public}/data/zip-ranges/743.json (100%) rename {public => apps/web/public}/data/zip-ranges/744.json (100%) rename {public => apps/web/public}/data/zip-ranges/745.json (100%) rename {public => apps/web/public}/data/zip-ranges/800.json (100%) rename {public => apps/web/public}/data/zip-ranges/801.json (100%) rename {public => apps/web/public}/data/zip-ranges/802.json (100%) rename {public => apps/web/public}/data/zip-ranges/803.json (100%) rename {public => apps/web/public}/data/zip-ranges/804.json (100%) rename {public => apps/web/public}/data/zip-ranges/805.json (100%) rename {public => apps/web/public}/data/zip-ranges/806.json (100%) rename {public => apps/web/public}/data/zip-ranges/807.json (100%) rename {public => apps/web/public}/data/zip-ranges/811.json (100%) rename {public => apps/web/public}/data/zip-ranges/812.json (100%) rename {public => apps/web/public}/data/zip-ranges/813.json (100%) rename {public => apps/web/public}/data/zip-ranges/814.json (100%) rename {public => apps/web/public}/data/zip-ranges/815.json (100%) rename {public => apps/web/public}/data/zip-ranges/817.json (100%) rename {public => apps/web/public}/data/zip-ranges/819.json (100%) rename {public => apps/web/public}/data/zip-ranges/820.json (100%) rename {public => apps/web/public}/data/zip-ranges/821.json (100%) rename {public => apps/web/public}/data/zip-ranges/822.json (100%) rename {public => apps/web/public}/data/zip-ranges/823.json (100%) rename {public => apps/web/public}/data/zip-ranges/824.json (100%) rename {public => apps/web/public}/data/zip-ranges/825.json (100%) rename {public => apps/web/public}/data/zip-ranges/826.json (100%) rename {public => apps/web/public}/data/zip-ranges/827.json (100%) rename {public => apps/web/public}/data/zip-ranges/828.json (100%) rename {public => apps/web/public}/data/zip-ranges/829.json (100%) rename {public => apps/web/public}/data/zip-ranges/830.json (100%) rename {public => apps/web/public}/data/zip-ranges/831.json (100%) rename {public => apps/web/public}/data/zip-ranges/832.json (100%) rename {public => apps/web/public}/data/zip-ranges/833.json (100%) rename {public => apps/web/public}/data/zip-ranges/840.json (100%) rename {public => apps/web/public}/data/zip-ranges/842.json (100%) rename {public => apps/web/public}/data/zip-ranges/843.json (100%) rename {public => apps/web/public}/data/zip-ranges/844.json (100%) rename {public => apps/web/public}/data/zip-ranges/845.json (100%) rename {public => apps/web/public}/data/zip-ranges/846.json (100%) rename {public => apps/web/public}/data/zip-ranges/847.json (100%) rename {public => apps/web/public}/data/zip-ranges/848.json (100%) rename {public => apps/web/public}/data/zip-ranges/849.json (100%) rename {public => apps/web/public}/data/zip-ranges/851.json (100%) rename {public => apps/web/public}/data/zip-ranges/852.json (100%) rename {public => apps/web/public}/data/zip-ranges/880.json (100%) rename {public => apps/web/public}/data/zip-ranges/881.json (100%) rename {public => apps/web/public}/data/zip-ranges/882.json (100%) rename {public => apps/web/public}/data/zip-ranges/883.json (100%) rename {public => apps/web/public}/data/zip-ranges/884.json (100%) rename {public => apps/web/public}/data/zip-ranges/885.json (100%) rename {public => apps/web/public}/data/zip-ranges/890.json (100%) rename {public => apps/web/public}/data/zip-ranges/891.json (100%) rename {public => apps/web/public}/data/zip-ranges/892.json (100%) rename {public => apps/web/public}/data/zip-ranges/893.json (100%) rename {public => apps/web/public}/data/zip-ranges/894.json (100%) rename {public => apps/web/public}/data/zip-ranges/896.json (100%) rename {public => apps/web/public}/data/zip-ranges/900.json (100%) rename {public => apps/web/public}/data/zip-ranges/901.json (100%) rename {public => apps/web/public}/data/zip-ranges/902.json (100%) rename {public => apps/web/public}/data/zip-ranges/903.json (100%) rename {public => apps/web/public}/data/zip-ranges/904.json (100%) rename {public => apps/web/public}/data/zip-ranges/905.json (100%) rename {public => apps/web/public}/data/zip-ranges/906.json (100%) rename {public => apps/web/public}/data/zip-ranges/907.json (100%) rename {public => apps/web/public}/data/zip-ranges/908.json (100%) rename {public => apps/web/public}/data/zip-ranges/909.json (100%) rename {public => apps/web/public}/data/zip-ranges/911.json (100%) rename {public => apps/web/public}/data/zip-ranges/912.json (100%) rename {public => apps/web/public}/data/zip-ranges/913.json (100%) rename {public => apps/web/public}/data/zip-ranges/920.json (100%) rename {public => apps/web/public}/data/zip-ranges/921.json (100%) rename {public => apps/web/public}/data/zip-ranges/922.json (100%) rename {public => apps/web/public}/data/zip-ranges/923.json (100%) rename {public => apps/web/public}/data/zip-ranges/924.json (100%) rename {public => apps/web/public}/data/zip-ranges/925.json (100%) rename {public => apps/web/public}/data/zip-ranges/926.json (100%) rename {public => apps/web/public}/data/zip-ranges/927.json (100%) rename {public => apps/web/public}/data/zip-ranges/928.json (100%) rename {public => apps/web/public}/data/zip-ranges/929.json (100%) rename {public => apps/web/public}/data/zip-ranges/931.json (100%) rename {public => apps/web/public}/data/zip-ranges/932.json (100%) rename {public => apps/web/public}/data/zip-ranges/940.json (100%) rename {public => apps/web/public}/data/zip-ranges/941.json (100%) rename {public => apps/web/public}/data/zip-ranges/942.json (100%) rename {public => apps/web/public}/data/zip-ranges/943.json (100%) rename {public => apps/web/public}/data/zip-ranges/944.json (100%) rename {public => apps/web/public}/data/zip-ranges/945.json (100%) rename {public => apps/web/public}/data/zip-ranges/946.json (100%) rename {public => apps/web/public}/data/zip-ranges/947.json (100%) rename {public => apps/web/public}/data/zip-ranges/950.json (100%) rename {public => apps/web/public}/data/zip-ranges/951.json (100%) rename {public => apps/web/public}/data/zip-ranges/952.json (100%) rename {public => apps/web/public}/data/zip-ranges/953.json (100%) rename {public => apps/web/public}/data/zip-ranges/954.json (100%) rename {public => apps/web/public}/data/zip-ranges/955.json (100%) rename {public => apps/web/public}/data/zip-ranges/956.json (100%) rename {public => apps/web/public}/data/zip-ranges/957.json (100%) rename {public => apps/web/public}/data/zip-ranges/958.json (100%) rename {public => apps/web/public}/data/zip-ranges/959.json (100%) rename {public => apps/web/public}/data/zip-ranges/961.json (100%) rename {public => apps/web/public}/data/zip-ranges/962.json (100%) rename {public => apps/web/public}/data/zip-ranges/963.json (100%) rename {public => apps/web/public}/data/zip-ranges/964.json (100%) rename {public => apps/web/public}/data/zip-ranges/965.json (100%) rename {public => apps/web/public}/data/zip-ranges/966.json (100%) rename {public => apps/web/public}/data/zip-ranges/970.json (100%) rename {public => apps/web/public}/data/zip-ranges/971.json (100%) rename {public => apps/web/public}/data/zip-ranges/972.json (100%) rename {public => apps/web/public}/data/zip-ranges/973.json (100%) rename {public => apps/web/public}/data/zip-ranges/974.json (100%) rename {public => apps/web/public}/data/zip-ranges/975.json (100%) rename {public => apps/web/public}/data/zip-ranges/976.json (100%) rename {public => apps/web/public}/data/zip-ranges/977.json (100%) rename {public => apps/web/public}/data/zip-ranges/978.json (100%) rename {public => apps/web/public}/data/zip-ranges/979.json (100%) rename {public => apps/web/public}/data/zip-ranges/981.json (100%) rename {public => apps/web/public}/data/zip-ranges/982.json (100%) rename {public => apps/web/public}/data/zip-ranges/983.json (100%) rename {scripts => apps/web/scripts}/etl.ts (100%) rename {scripts => apps/web/scripts}/parse-address-data.ts (100%) rename {scripts => apps/web/scripts}/parse-zip-ranges.ts (100%) rename {scripts => apps/web/scripts}/process-map-styles.ts (100%) rename {src => apps/web/src}/app/globals.css (100%) rename {src => apps/web/src}/app/icon.svg (100%) rename {src => apps/web/src}/app/layout.tsx (100%) rename {src => apps/web/src}/app/manifest.ts (100%) rename {src => apps/web/src}/app/opengraph-image.png (100%) rename {src => apps/web/src}/app/page.tsx (100%) rename {src => apps/web/src}/app/robots.ts (100%) rename {src => apps/web/src}/app/sitemap.ts (95%) rename {src => apps/web/src}/app/tw/[city]/[district]/page.tsx (99%) rename {src => apps/web/src}/components/address-detail-inputs.tsx (96%) rename {src => apps/web/src}/components/address-form.tsx (98%) rename {src => apps/web/src}/components/address-page.tsx (99%) rename {src => apps/web/src}/components/city-select.tsx (96%) rename {src => apps/web/src}/components/custom/input.tsx (100%) rename {src => apps/web/src}/components/custom/map.tsx (100%) rename {src => apps/web/src}/components/custom/select.tsx (100%) rename {src => apps/web/src}/components/district-select.tsx (96%) rename {src => apps/web/src}/components/icons.tsx (100%) rename {src => apps/web/src}/components/mode-toggle.tsx (100%) rename {src => apps/web/src}/components/result-card.tsx (100%) rename {src => apps/web/src}/components/road-combobox.tsx (98%) rename {src => apps/web/src}/components/taiwan-map.tsx (99%) rename {src => apps/web/src}/components/theme-provider.tsx (100%) rename {src => apps/web/src}/components/ui/button.tsx (100%) rename {src => apps/web/src}/components/ui/card.tsx (100%) rename {src => apps/web/src}/components/ui/combobox.tsx (100%) rename {src => apps/web/src}/components/ui/command.tsx (100%) rename {src => apps/web/src}/components/ui/dialog.tsx (100%) rename {src => apps/web/src}/components/ui/input-group.tsx (100%) rename {src => apps/web/src}/components/ui/input.tsx (100%) rename {src => apps/web/src}/components/ui/map.tsx (100%) rename {src => apps/web/src}/components/ui/popover.tsx (100%) rename {src => apps/web/src}/components/ui/select.tsx (100%) rename {src => apps/web/src}/components/ui/sonner.tsx (100%) rename {src => apps/web/src}/components/ui/textarea.tsx (100%) rename {src => apps/web/src}/hooks/use-address-state.ts (96%) rename {src => apps/web/src}/lib/data-loader.ts (94%) rename {src => apps/web/src}/lib/map-data-loader.ts (100%) rename {src => apps/web/src}/lib/map-proxy.ts (100%) rename {src => apps/web/src}/lib/map-utils.ts (100%) rename {src => apps/web/src}/lib/slug.ts (100%) rename {src => apps/web/src}/lib/utils.ts (100%) rename tsconfig.json => apps/web/tsconfig.json (100%) create mode 100644 packages/core/package.json rename {src/lib => packages/core/src}/format-english-address.ts (100%) create mode 100644 packages/core/src/index.ts rename {src/lib => packages/core/src}/lookup-zipcode.ts (100%) rename {src/lib => packages/core/src}/types.ts (100%) create mode 100644 packages/core/tsconfig.json diff --git a/.gitignore b/.gitignore index 4c4213d..d3dc5db 100644 --- a/.gitignore +++ b/.gitignore @@ -1,7 +1,7 @@ # See https://help.github.com/articles/ignoring-files/ for more about ignoring files. # dependencies -/node_modules +node_modules/ /.pnp .pnp.* .yarn/* @@ -11,14 +11,14 @@ !.yarn/versions # testing -/coverage +coverage/ # next.js -/.next/ -/out/ +.next/ +out/ # production -/build +build/ # misc .DS_Store @@ -47,4 +47,4 @@ AGENT.md .cursor # ETL raw data -scripts/raw/ +apps/web/scripts/raw/ diff --git a/.prettierignore b/.prettierignore index edfed70..a45ef57 100644 --- a/.prettierignore +++ b/.prettierignore @@ -3,5 +3,5 @@ out build node_modules pnpm-lock.yaml -public/data -src/components/ui +apps/web/public/data +apps/web/src/components/ui diff --git a/components.json b/apps/web/components.json similarity index 100% rename from components.json rename to apps/web/components.json diff --git a/eslint.config.mjs b/apps/web/eslint.config.mjs similarity index 100% rename from eslint.config.mjs rename to apps/web/eslint.config.mjs diff --git a/next.config.ts b/apps/web/next.config.ts similarity index 92% rename from next.config.ts rename to apps/web/next.config.ts index cbe5c47..e71b212 100644 --- a/next.config.ts +++ b/apps/web/next.config.ts @@ -1,6 +1,7 @@ import type { NextConfig } from "next"; const nextConfig: NextConfig = { + transpilePackages: ["@zipkit/core"], rewrites() { return { beforeFiles: [ diff --git a/apps/web/package.json b/apps/web/package.json new file mode 100644 index 0000000..65a9ed6 --- /dev/null +++ b/apps/web/package.json @@ -0,0 +1,52 @@ +{ + "name": "web", + "version": "0.1.0", + "private": true, + "scripts": { + "dev": "next dev", + "build": "next build", + "start": "next start", + "lint": "eslint", + "typecheck": "tsc --noEmit", + "etl": "tsx scripts/etl.ts", + "shadcn:diff": "for f in src/components/ui/*.tsx; do name=$(basename \"$f\" .tsx); echo \"=== $name ===\"; pnpm shadcn add \"$name\" --diff 2>&1 || pnpm shadcn add \"@mapcn/$name\" --diff 2>&1; echo; done", + "shadcn:update": "for f in src/components/ui/*.tsx; do name=$(basename \"$f\" .tsx); pnpm shadcn add \"$name\" --overwrite 2>&1 || pnpm shadcn add \"@mapcn/$name\" --overwrite 2>&1; done" + }, + "dependencies": { + "@base-ui/react": "^1.5.0", + "@vercel/analytics": "^2.0.1", + "@vercel/speed-insights": "^2.0.0", + "@zipkit/core": "workspace:*", + "class-variance-authority": "^0.7.1", + "clsx": "^2.1.1", + "cmdk": "^1.1.1", + "lucide-react": "^1.18.0", + "maplibre-gl": "^5.24.0", + "next": "16.2.9", + "next-themes": "^0.4.6", + "react": "19.2.7", + "react-dom": "19.2.7", + "shadcn": "^4.11.0", + "sonner": "^2.0.7", + "tailwind-merge": "^3.6.0", + "topojson-client": "^3.1.0", + "tw-animate-css": "^1.4.0" + }, + "devDependencies": { + "@tailwindcss/postcss": "^4.3.1", + "@types/geojson": "^7946.0.16", + "@types/node": "^25.9.3", + "@types/react": "^19.2.17", + "@types/react-dom": "^19.2.3", + "@types/topojson-client": "^3.1.5", + "@types/topojson-specification": "^1.0.5", + "eslint": "^9.39.4", + "eslint-config-next": "16.2.9", + "eslint-config-prettier": "^10.1.8", + "tailwindcss": "^4.3.1", + "taiwan-atlas": "^2021.9.20", + "tsx": "^4.22.4", + "typescript": "^6.0.3", + "typescript-eslint": "^8.61.1" + } +} diff --git a/postcss.config.mjs b/apps/web/postcss.config.mjs similarity index 100% rename from postcss.config.mjs rename to apps/web/postcss.config.mjs diff --git a/public/data/base.json b/apps/web/public/data/base.json similarity index 100% rename from public/data/base.json rename to apps/web/public/data/base.json diff --git a/public/data/map/counties-10t.json b/apps/web/public/data/map/counties-10t.json similarity index 100% rename from public/data/map/counties-10t.json rename to apps/web/public/data/map/counties-10t.json diff --git a/public/data/map/towns-10t.json b/apps/web/public/data/map/towns-10t.json similarity index 100% rename from public/data/map/towns-10t.json rename to apps/web/public/data/map/towns-10t.json diff --git a/public/data/roads/100.json b/apps/web/public/data/roads/100.json similarity index 100% rename from public/data/roads/100.json rename to apps/web/public/data/roads/100.json diff --git a/public/data/roads/103.json b/apps/web/public/data/roads/103.json similarity index 100% rename from public/data/roads/103.json rename to apps/web/public/data/roads/103.json diff --git a/public/data/roads/104.json b/apps/web/public/data/roads/104.json similarity index 100% rename from public/data/roads/104.json rename to apps/web/public/data/roads/104.json diff --git a/public/data/roads/105.json b/apps/web/public/data/roads/105.json similarity index 100% rename from public/data/roads/105.json rename to apps/web/public/data/roads/105.json diff --git a/public/data/roads/106.json b/apps/web/public/data/roads/106.json similarity index 100% rename from public/data/roads/106.json rename to apps/web/public/data/roads/106.json diff --git a/public/data/roads/108.json b/apps/web/public/data/roads/108.json similarity index 100% rename from public/data/roads/108.json rename to apps/web/public/data/roads/108.json diff --git a/public/data/roads/110.json b/apps/web/public/data/roads/110.json similarity index 100% rename from public/data/roads/110.json rename to apps/web/public/data/roads/110.json diff --git a/public/data/roads/111.json b/apps/web/public/data/roads/111.json similarity index 100% rename from public/data/roads/111.json rename to apps/web/public/data/roads/111.json diff --git a/public/data/roads/112.json b/apps/web/public/data/roads/112.json similarity index 100% rename from public/data/roads/112.json rename to apps/web/public/data/roads/112.json diff --git a/public/data/roads/114.json b/apps/web/public/data/roads/114.json similarity index 100% rename from public/data/roads/114.json rename to apps/web/public/data/roads/114.json diff --git a/public/data/roads/115.json b/apps/web/public/data/roads/115.json similarity index 100% rename from public/data/roads/115.json rename to apps/web/public/data/roads/115.json diff --git a/public/data/roads/116.json b/apps/web/public/data/roads/116.json similarity index 100% rename from public/data/roads/116.json rename to apps/web/public/data/roads/116.json diff --git a/public/data/roads/200.json b/apps/web/public/data/roads/200.json similarity index 100% rename from public/data/roads/200.json rename to apps/web/public/data/roads/200.json diff --git a/public/data/roads/201.json b/apps/web/public/data/roads/201.json similarity index 100% rename from public/data/roads/201.json rename to apps/web/public/data/roads/201.json diff --git a/public/data/roads/202.json b/apps/web/public/data/roads/202.json similarity index 100% rename from public/data/roads/202.json rename to apps/web/public/data/roads/202.json diff --git a/public/data/roads/203.json b/apps/web/public/data/roads/203.json similarity index 100% rename from public/data/roads/203.json rename to apps/web/public/data/roads/203.json diff --git a/public/data/roads/204.json b/apps/web/public/data/roads/204.json similarity index 100% rename from public/data/roads/204.json rename to apps/web/public/data/roads/204.json diff --git a/public/data/roads/205.json b/apps/web/public/data/roads/205.json similarity index 100% rename from public/data/roads/205.json rename to apps/web/public/data/roads/205.json diff --git a/public/data/roads/206.json b/apps/web/public/data/roads/206.json similarity index 100% rename from public/data/roads/206.json rename to apps/web/public/data/roads/206.json diff --git a/public/data/roads/207.json b/apps/web/public/data/roads/207.json similarity index 100% rename from public/data/roads/207.json rename to apps/web/public/data/roads/207.json diff --git a/public/data/roads/208.json b/apps/web/public/data/roads/208.json similarity index 100% rename from public/data/roads/208.json rename to apps/web/public/data/roads/208.json diff --git a/public/data/roads/209.json b/apps/web/public/data/roads/209.json similarity index 100% rename from public/data/roads/209.json rename to apps/web/public/data/roads/209.json diff --git a/public/data/roads/210.json b/apps/web/public/data/roads/210.json similarity index 100% rename from public/data/roads/210.json rename to apps/web/public/data/roads/210.json diff --git a/public/data/roads/211.json b/apps/web/public/data/roads/211.json similarity index 100% rename from public/data/roads/211.json rename to apps/web/public/data/roads/211.json diff --git a/public/data/roads/212.json b/apps/web/public/data/roads/212.json similarity index 100% rename from public/data/roads/212.json rename to apps/web/public/data/roads/212.json diff --git a/public/data/roads/220.json b/apps/web/public/data/roads/220.json similarity index 100% rename from public/data/roads/220.json rename to apps/web/public/data/roads/220.json diff --git a/public/data/roads/221.json b/apps/web/public/data/roads/221.json similarity index 100% rename from public/data/roads/221.json rename to apps/web/public/data/roads/221.json diff --git a/public/data/roads/222.json b/apps/web/public/data/roads/222.json similarity index 100% rename from public/data/roads/222.json rename to apps/web/public/data/roads/222.json diff --git a/public/data/roads/223.json b/apps/web/public/data/roads/223.json similarity index 100% rename from public/data/roads/223.json rename to apps/web/public/data/roads/223.json diff --git a/public/data/roads/224.json b/apps/web/public/data/roads/224.json similarity index 100% rename from public/data/roads/224.json rename to apps/web/public/data/roads/224.json diff --git a/public/data/roads/226.json b/apps/web/public/data/roads/226.json similarity index 100% rename from public/data/roads/226.json rename to apps/web/public/data/roads/226.json diff --git a/public/data/roads/227.json b/apps/web/public/data/roads/227.json similarity index 100% rename from public/data/roads/227.json rename to apps/web/public/data/roads/227.json diff --git a/public/data/roads/228.json b/apps/web/public/data/roads/228.json similarity index 100% rename from public/data/roads/228.json rename to apps/web/public/data/roads/228.json diff --git a/public/data/roads/231.json b/apps/web/public/data/roads/231.json similarity index 100% rename from public/data/roads/231.json rename to apps/web/public/data/roads/231.json diff --git a/public/data/roads/232.json b/apps/web/public/data/roads/232.json similarity index 100% rename from public/data/roads/232.json rename to apps/web/public/data/roads/232.json diff --git a/public/data/roads/233.json b/apps/web/public/data/roads/233.json similarity index 100% rename from public/data/roads/233.json rename to apps/web/public/data/roads/233.json diff --git a/public/data/roads/234.json b/apps/web/public/data/roads/234.json similarity index 100% rename from public/data/roads/234.json rename to apps/web/public/data/roads/234.json diff --git a/public/data/roads/235.json b/apps/web/public/data/roads/235.json similarity index 100% rename from public/data/roads/235.json rename to apps/web/public/data/roads/235.json diff --git a/public/data/roads/236.json b/apps/web/public/data/roads/236.json similarity index 100% rename from public/data/roads/236.json rename to apps/web/public/data/roads/236.json diff --git a/public/data/roads/237.json b/apps/web/public/data/roads/237.json similarity index 100% rename from public/data/roads/237.json rename to apps/web/public/data/roads/237.json diff --git a/public/data/roads/238.json b/apps/web/public/data/roads/238.json similarity index 100% rename from public/data/roads/238.json rename to apps/web/public/data/roads/238.json diff --git a/public/data/roads/239.json b/apps/web/public/data/roads/239.json similarity index 100% rename from public/data/roads/239.json rename to apps/web/public/data/roads/239.json diff --git a/public/data/roads/241.json b/apps/web/public/data/roads/241.json similarity index 100% rename from public/data/roads/241.json rename to apps/web/public/data/roads/241.json diff --git a/public/data/roads/242.json b/apps/web/public/data/roads/242.json similarity index 100% rename from public/data/roads/242.json rename to apps/web/public/data/roads/242.json diff --git a/public/data/roads/243.json b/apps/web/public/data/roads/243.json similarity index 100% rename from public/data/roads/243.json rename to apps/web/public/data/roads/243.json diff --git a/public/data/roads/244.json b/apps/web/public/data/roads/244.json similarity index 100% rename from public/data/roads/244.json rename to apps/web/public/data/roads/244.json diff --git a/public/data/roads/247.json b/apps/web/public/data/roads/247.json similarity index 100% rename from public/data/roads/247.json rename to apps/web/public/data/roads/247.json diff --git a/public/data/roads/248.json b/apps/web/public/data/roads/248.json similarity index 100% rename from public/data/roads/248.json rename to apps/web/public/data/roads/248.json diff --git a/public/data/roads/249.json b/apps/web/public/data/roads/249.json similarity index 100% rename from public/data/roads/249.json rename to apps/web/public/data/roads/249.json diff --git a/public/data/roads/251.json b/apps/web/public/data/roads/251.json similarity index 100% rename from public/data/roads/251.json rename to apps/web/public/data/roads/251.json diff --git a/public/data/roads/252.json b/apps/web/public/data/roads/252.json similarity index 100% rename from public/data/roads/252.json rename to apps/web/public/data/roads/252.json diff --git a/public/data/roads/253.json b/apps/web/public/data/roads/253.json similarity index 100% rename from public/data/roads/253.json rename to apps/web/public/data/roads/253.json diff --git a/public/data/roads/260.json b/apps/web/public/data/roads/260.json similarity index 100% rename from public/data/roads/260.json rename to apps/web/public/data/roads/260.json diff --git a/public/data/roads/261.json b/apps/web/public/data/roads/261.json similarity index 100% rename from public/data/roads/261.json rename to apps/web/public/data/roads/261.json diff --git a/public/data/roads/262.json b/apps/web/public/data/roads/262.json similarity index 100% rename from public/data/roads/262.json rename to apps/web/public/data/roads/262.json diff --git a/public/data/roads/263.json b/apps/web/public/data/roads/263.json similarity index 100% rename from public/data/roads/263.json rename to apps/web/public/data/roads/263.json diff --git a/public/data/roads/264.json b/apps/web/public/data/roads/264.json similarity index 100% rename from public/data/roads/264.json rename to apps/web/public/data/roads/264.json diff --git a/public/data/roads/265.json b/apps/web/public/data/roads/265.json similarity index 100% rename from public/data/roads/265.json rename to apps/web/public/data/roads/265.json diff --git a/public/data/roads/266.json b/apps/web/public/data/roads/266.json similarity index 100% rename from public/data/roads/266.json rename to apps/web/public/data/roads/266.json diff --git a/public/data/roads/267.json b/apps/web/public/data/roads/267.json similarity index 100% rename from public/data/roads/267.json rename to apps/web/public/data/roads/267.json diff --git a/public/data/roads/268.json b/apps/web/public/data/roads/268.json similarity index 100% rename from public/data/roads/268.json rename to apps/web/public/data/roads/268.json diff --git a/public/data/roads/269.json b/apps/web/public/data/roads/269.json similarity index 100% rename from public/data/roads/269.json rename to apps/web/public/data/roads/269.json diff --git a/public/data/roads/270.json b/apps/web/public/data/roads/270.json similarity index 100% rename from public/data/roads/270.json rename to apps/web/public/data/roads/270.json diff --git a/public/data/roads/272.json b/apps/web/public/data/roads/272.json similarity index 100% rename from public/data/roads/272.json rename to apps/web/public/data/roads/272.json diff --git a/public/data/roads/290.json b/apps/web/public/data/roads/290.json similarity index 100% rename from public/data/roads/290.json rename to apps/web/public/data/roads/290.json diff --git a/public/data/roads/300.json b/apps/web/public/data/roads/300.json similarity index 100% rename from public/data/roads/300.json rename to apps/web/public/data/roads/300.json diff --git a/public/data/roads/302.json b/apps/web/public/data/roads/302.json similarity index 100% rename from public/data/roads/302.json rename to apps/web/public/data/roads/302.json diff --git a/public/data/roads/303.json b/apps/web/public/data/roads/303.json similarity index 100% rename from public/data/roads/303.json rename to apps/web/public/data/roads/303.json diff --git a/public/data/roads/304.json b/apps/web/public/data/roads/304.json similarity index 100% rename from public/data/roads/304.json rename to apps/web/public/data/roads/304.json diff --git a/public/data/roads/305.json b/apps/web/public/data/roads/305.json similarity index 100% rename from public/data/roads/305.json rename to apps/web/public/data/roads/305.json diff --git a/public/data/roads/306.json b/apps/web/public/data/roads/306.json similarity index 100% rename from public/data/roads/306.json rename to apps/web/public/data/roads/306.json diff --git a/public/data/roads/307.json b/apps/web/public/data/roads/307.json similarity index 100% rename from public/data/roads/307.json rename to apps/web/public/data/roads/307.json diff --git a/public/data/roads/308.json b/apps/web/public/data/roads/308.json similarity index 100% rename from public/data/roads/308.json rename to apps/web/public/data/roads/308.json diff --git a/public/data/roads/310.json b/apps/web/public/data/roads/310.json similarity index 100% rename from public/data/roads/310.json rename to apps/web/public/data/roads/310.json diff --git a/public/data/roads/311.json b/apps/web/public/data/roads/311.json similarity index 100% rename from public/data/roads/311.json rename to apps/web/public/data/roads/311.json diff --git a/public/data/roads/312.json b/apps/web/public/data/roads/312.json similarity index 100% rename from public/data/roads/312.json rename to apps/web/public/data/roads/312.json diff --git a/public/data/roads/313.json b/apps/web/public/data/roads/313.json similarity index 100% rename from public/data/roads/313.json rename to apps/web/public/data/roads/313.json diff --git a/public/data/roads/314.json b/apps/web/public/data/roads/314.json similarity index 100% rename from public/data/roads/314.json rename to apps/web/public/data/roads/314.json diff --git a/public/data/roads/315.json b/apps/web/public/data/roads/315.json similarity index 100% rename from public/data/roads/315.json rename to apps/web/public/data/roads/315.json diff --git a/public/data/roads/320.json b/apps/web/public/data/roads/320.json similarity index 100% rename from public/data/roads/320.json rename to apps/web/public/data/roads/320.json diff --git a/public/data/roads/324.json b/apps/web/public/data/roads/324.json similarity index 100% rename from public/data/roads/324.json rename to apps/web/public/data/roads/324.json diff --git a/public/data/roads/325.json b/apps/web/public/data/roads/325.json similarity index 100% rename from public/data/roads/325.json rename to apps/web/public/data/roads/325.json diff --git a/public/data/roads/326.json b/apps/web/public/data/roads/326.json similarity index 100% rename from public/data/roads/326.json rename to apps/web/public/data/roads/326.json diff --git a/public/data/roads/327.json b/apps/web/public/data/roads/327.json similarity index 100% rename from public/data/roads/327.json rename to apps/web/public/data/roads/327.json diff --git a/public/data/roads/328.json b/apps/web/public/data/roads/328.json similarity index 100% rename from public/data/roads/328.json rename to apps/web/public/data/roads/328.json diff --git a/public/data/roads/330.json b/apps/web/public/data/roads/330.json similarity index 100% rename from public/data/roads/330.json rename to apps/web/public/data/roads/330.json diff --git a/public/data/roads/333.json b/apps/web/public/data/roads/333.json similarity index 100% rename from public/data/roads/333.json rename to apps/web/public/data/roads/333.json diff --git a/public/data/roads/334.json b/apps/web/public/data/roads/334.json similarity index 100% rename from public/data/roads/334.json rename to apps/web/public/data/roads/334.json diff --git a/public/data/roads/335.json b/apps/web/public/data/roads/335.json similarity index 100% rename from public/data/roads/335.json rename to apps/web/public/data/roads/335.json diff --git a/public/data/roads/336.json b/apps/web/public/data/roads/336.json similarity index 100% rename from public/data/roads/336.json rename to apps/web/public/data/roads/336.json diff --git a/public/data/roads/337.json b/apps/web/public/data/roads/337.json similarity index 100% rename from public/data/roads/337.json rename to apps/web/public/data/roads/337.json diff --git a/public/data/roads/338.json b/apps/web/public/data/roads/338.json similarity index 100% rename from public/data/roads/338.json rename to apps/web/public/data/roads/338.json diff --git a/public/data/roads/350.json b/apps/web/public/data/roads/350.json similarity index 100% rename from public/data/roads/350.json rename to apps/web/public/data/roads/350.json diff --git a/public/data/roads/351.json b/apps/web/public/data/roads/351.json similarity index 100% rename from public/data/roads/351.json rename to apps/web/public/data/roads/351.json diff --git a/public/data/roads/352.json b/apps/web/public/data/roads/352.json similarity index 100% rename from public/data/roads/352.json rename to apps/web/public/data/roads/352.json diff --git a/public/data/roads/353.json b/apps/web/public/data/roads/353.json similarity index 100% rename from public/data/roads/353.json rename to apps/web/public/data/roads/353.json diff --git a/public/data/roads/354.json b/apps/web/public/data/roads/354.json similarity index 100% rename from public/data/roads/354.json rename to apps/web/public/data/roads/354.json diff --git a/public/data/roads/356.json b/apps/web/public/data/roads/356.json similarity index 100% rename from public/data/roads/356.json rename to apps/web/public/data/roads/356.json diff --git a/public/data/roads/357.json b/apps/web/public/data/roads/357.json similarity index 100% rename from public/data/roads/357.json rename to apps/web/public/data/roads/357.json diff --git a/public/data/roads/358.json b/apps/web/public/data/roads/358.json similarity index 100% rename from public/data/roads/358.json rename to apps/web/public/data/roads/358.json diff --git a/public/data/roads/360.json b/apps/web/public/data/roads/360.json similarity index 100% rename from public/data/roads/360.json rename to apps/web/public/data/roads/360.json diff --git a/public/data/roads/361.json b/apps/web/public/data/roads/361.json similarity index 100% rename from public/data/roads/361.json rename to apps/web/public/data/roads/361.json diff --git a/public/data/roads/362.json b/apps/web/public/data/roads/362.json similarity index 100% rename from public/data/roads/362.json rename to apps/web/public/data/roads/362.json diff --git a/public/data/roads/363.json b/apps/web/public/data/roads/363.json similarity index 100% rename from public/data/roads/363.json rename to apps/web/public/data/roads/363.json diff --git a/public/data/roads/364.json b/apps/web/public/data/roads/364.json similarity index 100% rename from public/data/roads/364.json rename to apps/web/public/data/roads/364.json diff --git a/public/data/roads/365.json b/apps/web/public/data/roads/365.json similarity index 100% rename from public/data/roads/365.json rename to apps/web/public/data/roads/365.json diff --git a/public/data/roads/366.json b/apps/web/public/data/roads/366.json similarity index 100% rename from public/data/roads/366.json rename to apps/web/public/data/roads/366.json diff --git a/public/data/roads/367.json b/apps/web/public/data/roads/367.json similarity index 100% rename from public/data/roads/367.json rename to apps/web/public/data/roads/367.json diff --git a/public/data/roads/368.json b/apps/web/public/data/roads/368.json similarity index 100% rename from public/data/roads/368.json rename to apps/web/public/data/roads/368.json diff --git a/public/data/roads/369.json b/apps/web/public/data/roads/369.json similarity index 100% rename from public/data/roads/369.json rename to apps/web/public/data/roads/369.json diff --git a/public/data/roads/400.json b/apps/web/public/data/roads/400.json similarity index 100% rename from public/data/roads/400.json rename to apps/web/public/data/roads/400.json diff --git a/public/data/roads/401.json b/apps/web/public/data/roads/401.json similarity index 100% rename from public/data/roads/401.json rename to apps/web/public/data/roads/401.json diff --git a/public/data/roads/402.json b/apps/web/public/data/roads/402.json similarity index 100% rename from public/data/roads/402.json rename to apps/web/public/data/roads/402.json diff --git a/public/data/roads/403.json b/apps/web/public/data/roads/403.json similarity index 100% rename from public/data/roads/403.json rename to apps/web/public/data/roads/403.json diff --git a/public/data/roads/404.json b/apps/web/public/data/roads/404.json similarity index 100% rename from public/data/roads/404.json rename to apps/web/public/data/roads/404.json diff --git a/public/data/roads/406.json b/apps/web/public/data/roads/406.json similarity index 100% rename from public/data/roads/406.json rename to apps/web/public/data/roads/406.json diff --git a/public/data/roads/407.json b/apps/web/public/data/roads/407.json similarity index 100% rename from public/data/roads/407.json rename to apps/web/public/data/roads/407.json diff --git a/public/data/roads/408.json b/apps/web/public/data/roads/408.json similarity index 100% rename from public/data/roads/408.json rename to apps/web/public/data/roads/408.json diff --git a/public/data/roads/411.json b/apps/web/public/data/roads/411.json similarity index 100% rename from public/data/roads/411.json rename to apps/web/public/data/roads/411.json diff --git a/public/data/roads/412.json b/apps/web/public/data/roads/412.json similarity index 100% rename from public/data/roads/412.json rename to apps/web/public/data/roads/412.json diff --git a/public/data/roads/413.json b/apps/web/public/data/roads/413.json similarity index 100% rename from public/data/roads/413.json rename to apps/web/public/data/roads/413.json diff --git a/public/data/roads/414.json b/apps/web/public/data/roads/414.json similarity index 100% rename from public/data/roads/414.json rename to apps/web/public/data/roads/414.json diff --git a/public/data/roads/420.json b/apps/web/public/data/roads/420.json similarity index 100% rename from public/data/roads/420.json rename to apps/web/public/data/roads/420.json diff --git a/public/data/roads/421.json b/apps/web/public/data/roads/421.json similarity index 100% rename from public/data/roads/421.json rename to apps/web/public/data/roads/421.json diff --git a/public/data/roads/422.json b/apps/web/public/data/roads/422.json similarity index 100% rename from public/data/roads/422.json rename to apps/web/public/data/roads/422.json diff --git a/public/data/roads/423.json b/apps/web/public/data/roads/423.json similarity index 100% rename from public/data/roads/423.json rename to apps/web/public/data/roads/423.json diff --git a/public/data/roads/424.json b/apps/web/public/data/roads/424.json similarity index 100% rename from public/data/roads/424.json rename to apps/web/public/data/roads/424.json diff --git a/public/data/roads/426.json b/apps/web/public/data/roads/426.json similarity index 100% rename from public/data/roads/426.json rename to apps/web/public/data/roads/426.json diff --git a/public/data/roads/427.json b/apps/web/public/data/roads/427.json similarity index 100% rename from public/data/roads/427.json rename to apps/web/public/data/roads/427.json diff --git a/public/data/roads/428.json b/apps/web/public/data/roads/428.json similarity index 100% rename from public/data/roads/428.json rename to apps/web/public/data/roads/428.json diff --git a/public/data/roads/429.json b/apps/web/public/data/roads/429.json similarity index 100% rename from public/data/roads/429.json rename to apps/web/public/data/roads/429.json diff --git a/public/data/roads/432.json b/apps/web/public/data/roads/432.json similarity index 100% rename from public/data/roads/432.json rename to apps/web/public/data/roads/432.json diff --git a/public/data/roads/433.json b/apps/web/public/data/roads/433.json similarity index 100% rename from public/data/roads/433.json rename to apps/web/public/data/roads/433.json diff --git a/public/data/roads/434.json b/apps/web/public/data/roads/434.json similarity index 100% rename from public/data/roads/434.json rename to apps/web/public/data/roads/434.json diff --git a/public/data/roads/435.json b/apps/web/public/data/roads/435.json similarity index 100% rename from public/data/roads/435.json rename to apps/web/public/data/roads/435.json diff --git a/public/data/roads/436.json b/apps/web/public/data/roads/436.json similarity index 100% rename from public/data/roads/436.json rename to apps/web/public/data/roads/436.json diff --git a/public/data/roads/437.json b/apps/web/public/data/roads/437.json similarity index 100% rename from public/data/roads/437.json rename to apps/web/public/data/roads/437.json diff --git a/public/data/roads/438.json b/apps/web/public/data/roads/438.json similarity index 100% rename from public/data/roads/438.json rename to apps/web/public/data/roads/438.json diff --git a/public/data/roads/439.json b/apps/web/public/data/roads/439.json similarity index 100% rename from public/data/roads/439.json rename to apps/web/public/data/roads/439.json diff --git a/public/data/roads/500.json b/apps/web/public/data/roads/500.json similarity index 100% rename from public/data/roads/500.json rename to apps/web/public/data/roads/500.json diff --git a/public/data/roads/502.json b/apps/web/public/data/roads/502.json similarity index 100% rename from public/data/roads/502.json rename to apps/web/public/data/roads/502.json diff --git a/public/data/roads/503.json b/apps/web/public/data/roads/503.json similarity index 100% rename from public/data/roads/503.json rename to apps/web/public/data/roads/503.json diff --git a/public/data/roads/504.json b/apps/web/public/data/roads/504.json similarity index 100% rename from public/data/roads/504.json rename to apps/web/public/data/roads/504.json diff --git a/public/data/roads/505.json b/apps/web/public/data/roads/505.json similarity index 100% rename from public/data/roads/505.json rename to apps/web/public/data/roads/505.json diff --git a/public/data/roads/506.json b/apps/web/public/data/roads/506.json similarity index 100% rename from public/data/roads/506.json rename to apps/web/public/data/roads/506.json diff --git a/public/data/roads/507.json b/apps/web/public/data/roads/507.json similarity index 100% rename from public/data/roads/507.json rename to apps/web/public/data/roads/507.json diff --git a/public/data/roads/508.json b/apps/web/public/data/roads/508.json similarity index 100% rename from public/data/roads/508.json rename to apps/web/public/data/roads/508.json diff --git a/public/data/roads/509.json b/apps/web/public/data/roads/509.json similarity index 100% rename from public/data/roads/509.json rename to apps/web/public/data/roads/509.json diff --git a/public/data/roads/510.json b/apps/web/public/data/roads/510.json similarity index 100% rename from public/data/roads/510.json rename to apps/web/public/data/roads/510.json diff --git a/public/data/roads/511.json b/apps/web/public/data/roads/511.json similarity index 100% rename from public/data/roads/511.json rename to apps/web/public/data/roads/511.json diff --git a/public/data/roads/512.json b/apps/web/public/data/roads/512.json similarity index 100% rename from public/data/roads/512.json rename to apps/web/public/data/roads/512.json diff --git a/public/data/roads/513.json b/apps/web/public/data/roads/513.json similarity index 100% rename from public/data/roads/513.json rename to apps/web/public/data/roads/513.json diff --git a/public/data/roads/514.json b/apps/web/public/data/roads/514.json similarity index 100% rename from public/data/roads/514.json rename to apps/web/public/data/roads/514.json diff --git a/public/data/roads/515.json b/apps/web/public/data/roads/515.json similarity index 100% rename from public/data/roads/515.json rename to apps/web/public/data/roads/515.json diff --git a/public/data/roads/516.json b/apps/web/public/data/roads/516.json similarity index 100% rename from public/data/roads/516.json rename to apps/web/public/data/roads/516.json diff --git a/public/data/roads/520.json b/apps/web/public/data/roads/520.json similarity index 100% rename from public/data/roads/520.json rename to apps/web/public/data/roads/520.json diff --git a/public/data/roads/521.json b/apps/web/public/data/roads/521.json similarity index 100% rename from public/data/roads/521.json rename to apps/web/public/data/roads/521.json diff --git a/public/data/roads/522.json b/apps/web/public/data/roads/522.json similarity index 100% rename from public/data/roads/522.json rename to apps/web/public/data/roads/522.json diff --git a/public/data/roads/523.json b/apps/web/public/data/roads/523.json similarity index 100% rename from public/data/roads/523.json rename to apps/web/public/data/roads/523.json diff --git a/public/data/roads/524.json b/apps/web/public/data/roads/524.json similarity index 100% rename from public/data/roads/524.json rename to apps/web/public/data/roads/524.json diff --git a/public/data/roads/525.json b/apps/web/public/data/roads/525.json similarity index 100% rename from public/data/roads/525.json rename to apps/web/public/data/roads/525.json diff --git a/public/data/roads/526.json b/apps/web/public/data/roads/526.json similarity index 100% rename from public/data/roads/526.json rename to apps/web/public/data/roads/526.json diff --git a/public/data/roads/527.json b/apps/web/public/data/roads/527.json similarity index 100% rename from public/data/roads/527.json rename to apps/web/public/data/roads/527.json diff --git a/public/data/roads/528.json b/apps/web/public/data/roads/528.json similarity index 100% rename from public/data/roads/528.json rename to apps/web/public/data/roads/528.json diff --git a/public/data/roads/530.json b/apps/web/public/data/roads/530.json similarity index 100% rename from public/data/roads/530.json rename to apps/web/public/data/roads/530.json diff --git a/public/data/roads/540.json b/apps/web/public/data/roads/540.json similarity index 100% rename from public/data/roads/540.json rename to apps/web/public/data/roads/540.json diff --git a/public/data/roads/541.json b/apps/web/public/data/roads/541.json similarity index 100% rename from public/data/roads/541.json rename to apps/web/public/data/roads/541.json diff --git a/public/data/roads/542.json b/apps/web/public/data/roads/542.json similarity index 100% rename from public/data/roads/542.json rename to apps/web/public/data/roads/542.json diff --git a/public/data/roads/544.json b/apps/web/public/data/roads/544.json similarity index 100% rename from public/data/roads/544.json rename to apps/web/public/data/roads/544.json diff --git a/public/data/roads/545.json b/apps/web/public/data/roads/545.json similarity index 100% rename from public/data/roads/545.json rename to apps/web/public/data/roads/545.json diff --git a/public/data/roads/546.json b/apps/web/public/data/roads/546.json similarity index 100% rename from public/data/roads/546.json rename to apps/web/public/data/roads/546.json diff --git a/public/data/roads/551.json b/apps/web/public/data/roads/551.json similarity index 100% rename from public/data/roads/551.json rename to apps/web/public/data/roads/551.json diff --git a/public/data/roads/552.json b/apps/web/public/data/roads/552.json similarity index 100% rename from public/data/roads/552.json rename to apps/web/public/data/roads/552.json diff --git a/public/data/roads/553.json b/apps/web/public/data/roads/553.json similarity index 100% rename from public/data/roads/553.json rename to apps/web/public/data/roads/553.json diff --git a/public/data/roads/555.json b/apps/web/public/data/roads/555.json similarity index 100% rename from public/data/roads/555.json rename to apps/web/public/data/roads/555.json diff --git a/public/data/roads/556.json b/apps/web/public/data/roads/556.json similarity index 100% rename from public/data/roads/556.json rename to apps/web/public/data/roads/556.json diff --git a/public/data/roads/557.json b/apps/web/public/data/roads/557.json similarity index 100% rename from public/data/roads/557.json rename to apps/web/public/data/roads/557.json diff --git a/public/data/roads/558.json b/apps/web/public/data/roads/558.json similarity index 100% rename from public/data/roads/558.json rename to apps/web/public/data/roads/558.json diff --git a/public/data/roads/600.json b/apps/web/public/data/roads/600.json similarity index 100% rename from public/data/roads/600.json rename to apps/web/public/data/roads/600.json diff --git a/public/data/roads/602.json b/apps/web/public/data/roads/602.json similarity index 100% rename from public/data/roads/602.json rename to apps/web/public/data/roads/602.json diff --git a/public/data/roads/603.json b/apps/web/public/data/roads/603.json similarity index 100% rename from public/data/roads/603.json rename to apps/web/public/data/roads/603.json diff --git a/public/data/roads/604.json b/apps/web/public/data/roads/604.json similarity index 100% rename from public/data/roads/604.json rename to apps/web/public/data/roads/604.json diff --git a/public/data/roads/605.json b/apps/web/public/data/roads/605.json similarity index 100% rename from public/data/roads/605.json rename to apps/web/public/data/roads/605.json diff --git a/public/data/roads/606.json b/apps/web/public/data/roads/606.json similarity index 100% rename from public/data/roads/606.json rename to apps/web/public/data/roads/606.json diff --git a/public/data/roads/607.json b/apps/web/public/data/roads/607.json similarity index 100% rename from public/data/roads/607.json rename to apps/web/public/data/roads/607.json diff --git a/public/data/roads/608.json b/apps/web/public/data/roads/608.json similarity index 100% rename from public/data/roads/608.json rename to apps/web/public/data/roads/608.json diff --git a/public/data/roads/611.json b/apps/web/public/data/roads/611.json similarity index 100% rename from public/data/roads/611.json rename to apps/web/public/data/roads/611.json diff --git a/public/data/roads/612.json b/apps/web/public/data/roads/612.json similarity index 100% rename from public/data/roads/612.json rename to apps/web/public/data/roads/612.json diff --git a/public/data/roads/613.json b/apps/web/public/data/roads/613.json similarity index 100% rename from public/data/roads/613.json rename to apps/web/public/data/roads/613.json diff --git a/public/data/roads/614.json b/apps/web/public/data/roads/614.json similarity index 100% rename from public/data/roads/614.json rename to apps/web/public/data/roads/614.json diff --git a/public/data/roads/615.json b/apps/web/public/data/roads/615.json similarity index 100% rename from public/data/roads/615.json rename to apps/web/public/data/roads/615.json diff --git a/public/data/roads/616.json b/apps/web/public/data/roads/616.json similarity index 100% rename from public/data/roads/616.json rename to apps/web/public/data/roads/616.json diff --git a/public/data/roads/621.json b/apps/web/public/data/roads/621.json similarity index 100% rename from public/data/roads/621.json rename to apps/web/public/data/roads/621.json diff --git a/public/data/roads/622.json b/apps/web/public/data/roads/622.json similarity index 100% rename from public/data/roads/622.json rename to apps/web/public/data/roads/622.json diff --git a/public/data/roads/623.json b/apps/web/public/data/roads/623.json similarity index 100% rename from public/data/roads/623.json rename to apps/web/public/data/roads/623.json diff --git a/public/data/roads/624.json b/apps/web/public/data/roads/624.json similarity index 100% rename from public/data/roads/624.json rename to apps/web/public/data/roads/624.json diff --git a/public/data/roads/625.json b/apps/web/public/data/roads/625.json similarity index 100% rename from public/data/roads/625.json rename to apps/web/public/data/roads/625.json diff --git a/public/data/roads/630.json b/apps/web/public/data/roads/630.json similarity index 100% rename from public/data/roads/630.json rename to apps/web/public/data/roads/630.json diff --git a/public/data/roads/631.json b/apps/web/public/data/roads/631.json similarity index 100% rename from public/data/roads/631.json rename to apps/web/public/data/roads/631.json diff --git a/public/data/roads/632.json b/apps/web/public/data/roads/632.json similarity index 100% rename from public/data/roads/632.json rename to apps/web/public/data/roads/632.json diff --git a/public/data/roads/633.json b/apps/web/public/data/roads/633.json similarity index 100% rename from public/data/roads/633.json rename to apps/web/public/data/roads/633.json diff --git a/public/data/roads/634.json b/apps/web/public/data/roads/634.json similarity index 100% rename from public/data/roads/634.json rename to apps/web/public/data/roads/634.json diff --git a/public/data/roads/635.json b/apps/web/public/data/roads/635.json similarity index 100% rename from public/data/roads/635.json rename to apps/web/public/data/roads/635.json diff --git a/public/data/roads/636.json b/apps/web/public/data/roads/636.json similarity index 100% rename from public/data/roads/636.json rename to apps/web/public/data/roads/636.json diff --git a/public/data/roads/637.json b/apps/web/public/data/roads/637.json similarity index 100% rename from public/data/roads/637.json rename to apps/web/public/data/roads/637.json diff --git a/public/data/roads/638.json b/apps/web/public/data/roads/638.json similarity index 100% rename from public/data/roads/638.json rename to apps/web/public/data/roads/638.json diff --git a/public/data/roads/640.json b/apps/web/public/data/roads/640.json similarity index 100% rename from public/data/roads/640.json rename to apps/web/public/data/roads/640.json diff --git a/public/data/roads/643.json b/apps/web/public/data/roads/643.json similarity index 100% rename from public/data/roads/643.json rename to apps/web/public/data/roads/643.json diff --git a/public/data/roads/646.json b/apps/web/public/data/roads/646.json similarity index 100% rename from public/data/roads/646.json rename to apps/web/public/data/roads/646.json diff --git a/public/data/roads/647.json b/apps/web/public/data/roads/647.json similarity index 100% rename from public/data/roads/647.json rename to apps/web/public/data/roads/647.json diff --git a/public/data/roads/648.json b/apps/web/public/data/roads/648.json similarity index 100% rename from public/data/roads/648.json rename to apps/web/public/data/roads/648.json diff --git a/public/data/roads/649.json b/apps/web/public/data/roads/649.json similarity index 100% rename from public/data/roads/649.json rename to apps/web/public/data/roads/649.json diff --git a/public/data/roads/651.json b/apps/web/public/data/roads/651.json similarity index 100% rename from public/data/roads/651.json rename to apps/web/public/data/roads/651.json diff --git a/public/data/roads/652.json b/apps/web/public/data/roads/652.json similarity index 100% rename from public/data/roads/652.json rename to apps/web/public/data/roads/652.json diff --git a/public/data/roads/653.json b/apps/web/public/data/roads/653.json similarity index 100% rename from public/data/roads/653.json rename to apps/web/public/data/roads/653.json diff --git a/public/data/roads/654.json b/apps/web/public/data/roads/654.json similarity index 100% rename from public/data/roads/654.json rename to apps/web/public/data/roads/654.json diff --git a/public/data/roads/655.json b/apps/web/public/data/roads/655.json similarity index 100% rename from public/data/roads/655.json rename to apps/web/public/data/roads/655.json diff --git a/public/data/roads/700.json b/apps/web/public/data/roads/700.json similarity index 100% rename from public/data/roads/700.json rename to apps/web/public/data/roads/700.json diff --git a/public/data/roads/701.json b/apps/web/public/data/roads/701.json similarity index 100% rename from public/data/roads/701.json rename to apps/web/public/data/roads/701.json diff --git a/public/data/roads/702.json b/apps/web/public/data/roads/702.json similarity index 100% rename from public/data/roads/702.json rename to apps/web/public/data/roads/702.json diff --git a/public/data/roads/704.json b/apps/web/public/data/roads/704.json similarity index 100% rename from public/data/roads/704.json rename to apps/web/public/data/roads/704.json diff --git a/public/data/roads/708.json b/apps/web/public/data/roads/708.json similarity index 100% rename from public/data/roads/708.json rename to apps/web/public/data/roads/708.json diff --git a/public/data/roads/709.json b/apps/web/public/data/roads/709.json similarity index 100% rename from public/data/roads/709.json rename to apps/web/public/data/roads/709.json diff --git a/public/data/roads/710.json b/apps/web/public/data/roads/710.json similarity index 100% rename from public/data/roads/710.json rename to apps/web/public/data/roads/710.json diff --git a/public/data/roads/711.json b/apps/web/public/data/roads/711.json similarity index 100% rename from public/data/roads/711.json rename to apps/web/public/data/roads/711.json diff --git a/public/data/roads/712.json b/apps/web/public/data/roads/712.json similarity index 100% rename from public/data/roads/712.json rename to apps/web/public/data/roads/712.json diff --git a/public/data/roads/713.json b/apps/web/public/data/roads/713.json similarity index 100% rename from public/data/roads/713.json rename to apps/web/public/data/roads/713.json diff --git a/public/data/roads/714.json b/apps/web/public/data/roads/714.json similarity index 100% rename from public/data/roads/714.json rename to apps/web/public/data/roads/714.json diff --git a/public/data/roads/715.json b/apps/web/public/data/roads/715.json similarity index 100% rename from public/data/roads/715.json rename to apps/web/public/data/roads/715.json diff --git a/public/data/roads/716.json b/apps/web/public/data/roads/716.json similarity index 100% rename from public/data/roads/716.json rename to apps/web/public/data/roads/716.json diff --git a/public/data/roads/717.json b/apps/web/public/data/roads/717.json similarity index 100% rename from public/data/roads/717.json rename to apps/web/public/data/roads/717.json diff --git a/public/data/roads/718.json b/apps/web/public/data/roads/718.json similarity index 100% rename from public/data/roads/718.json rename to apps/web/public/data/roads/718.json diff --git a/public/data/roads/719.json b/apps/web/public/data/roads/719.json similarity index 100% rename from public/data/roads/719.json rename to apps/web/public/data/roads/719.json diff --git a/public/data/roads/720.json b/apps/web/public/data/roads/720.json similarity index 100% rename from public/data/roads/720.json rename to apps/web/public/data/roads/720.json diff --git a/public/data/roads/721.json b/apps/web/public/data/roads/721.json similarity index 100% rename from public/data/roads/721.json rename to apps/web/public/data/roads/721.json diff --git a/public/data/roads/722.json b/apps/web/public/data/roads/722.json similarity index 100% rename from public/data/roads/722.json rename to apps/web/public/data/roads/722.json diff --git a/public/data/roads/723.json b/apps/web/public/data/roads/723.json similarity index 100% rename from public/data/roads/723.json rename to apps/web/public/data/roads/723.json diff --git a/public/data/roads/724.json b/apps/web/public/data/roads/724.json similarity index 100% rename from public/data/roads/724.json rename to apps/web/public/data/roads/724.json diff --git a/public/data/roads/725.json b/apps/web/public/data/roads/725.json similarity index 100% rename from public/data/roads/725.json rename to apps/web/public/data/roads/725.json diff --git a/public/data/roads/726.json b/apps/web/public/data/roads/726.json similarity index 100% rename from public/data/roads/726.json rename to apps/web/public/data/roads/726.json diff --git a/public/data/roads/727.json b/apps/web/public/data/roads/727.json similarity index 100% rename from public/data/roads/727.json rename to apps/web/public/data/roads/727.json diff --git a/public/data/roads/730.json b/apps/web/public/data/roads/730.json similarity index 100% rename from public/data/roads/730.json rename to apps/web/public/data/roads/730.json diff --git a/public/data/roads/731.json b/apps/web/public/data/roads/731.json similarity index 100% rename from public/data/roads/731.json rename to apps/web/public/data/roads/731.json diff --git a/public/data/roads/732.json b/apps/web/public/data/roads/732.json similarity index 100% rename from public/data/roads/732.json rename to apps/web/public/data/roads/732.json diff --git a/public/data/roads/733.json b/apps/web/public/data/roads/733.json similarity index 100% rename from public/data/roads/733.json rename to apps/web/public/data/roads/733.json diff --git a/public/data/roads/734.json b/apps/web/public/data/roads/734.json similarity index 100% rename from public/data/roads/734.json rename to apps/web/public/data/roads/734.json diff --git a/public/data/roads/735.json b/apps/web/public/data/roads/735.json similarity index 100% rename from public/data/roads/735.json rename to apps/web/public/data/roads/735.json diff --git a/public/data/roads/736.json b/apps/web/public/data/roads/736.json similarity index 100% rename from public/data/roads/736.json rename to apps/web/public/data/roads/736.json diff --git a/public/data/roads/737.json b/apps/web/public/data/roads/737.json similarity index 100% rename from public/data/roads/737.json rename to apps/web/public/data/roads/737.json diff --git a/public/data/roads/741.json b/apps/web/public/data/roads/741.json similarity index 100% rename from public/data/roads/741.json rename to apps/web/public/data/roads/741.json diff --git a/public/data/roads/742.json b/apps/web/public/data/roads/742.json similarity index 100% rename from public/data/roads/742.json rename to apps/web/public/data/roads/742.json diff --git a/public/data/roads/743.json b/apps/web/public/data/roads/743.json similarity index 100% rename from public/data/roads/743.json rename to apps/web/public/data/roads/743.json diff --git a/public/data/roads/744.json b/apps/web/public/data/roads/744.json similarity index 100% rename from public/data/roads/744.json rename to apps/web/public/data/roads/744.json diff --git a/public/data/roads/745.json b/apps/web/public/data/roads/745.json similarity index 100% rename from public/data/roads/745.json rename to apps/web/public/data/roads/745.json diff --git a/public/data/roads/800.json b/apps/web/public/data/roads/800.json similarity index 100% rename from public/data/roads/800.json rename to apps/web/public/data/roads/800.json diff --git a/public/data/roads/801.json b/apps/web/public/data/roads/801.json similarity index 100% rename from public/data/roads/801.json rename to apps/web/public/data/roads/801.json diff --git a/public/data/roads/802.json b/apps/web/public/data/roads/802.json similarity index 100% rename from public/data/roads/802.json rename to apps/web/public/data/roads/802.json diff --git a/public/data/roads/803.json b/apps/web/public/data/roads/803.json similarity index 100% rename from public/data/roads/803.json rename to apps/web/public/data/roads/803.json diff --git a/public/data/roads/804.json b/apps/web/public/data/roads/804.json similarity index 100% rename from public/data/roads/804.json rename to apps/web/public/data/roads/804.json diff --git a/public/data/roads/805.json b/apps/web/public/data/roads/805.json similarity index 100% rename from public/data/roads/805.json rename to apps/web/public/data/roads/805.json diff --git a/public/data/roads/806.json b/apps/web/public/data/roads/806.json similarity index 100% rename from public/data/roads/806.json rename to apps/web/public/data/roads/806.json diff --git a/public/data/roads/807.json b/apps/web/public/data/roads/807.json similarity index 100% rename from public/data/roads/807.json rename to apps/web/public/data/roads/807.json diff --git a/public/data/roads/811.json b/apps/web/public/data/roads/811.json similarity index 100% rename from public/data/roads/811.json rename to apps/web/public/data/roads/811.json diff --git a/public/data/roads/812.json b/apps/web/public/data/roads/812.json similarity index 100% rename from public/data/roads/812.json rename to apps/web/public/data/roads/812.json diff --git a/public/data/roads/813.json b/apps/web/public/data/roads/813.json similarity index 100% rename from public/data/roads/813.json rename to apps/web/public/data/roads/813.json diff --git a/public/data/roads/814.json b/apps/web/public/data/roads/814.json similarity index 100% rename from public/data/roads/814.json rename to apps/web/public/data/roads/814.json diff --git a/public/data/roads/815.json b/apps/web/public/data/roads/815.json similarity index 100% rename from public/data/roads/815.json rename to apps/web/public/data/roads/815.json diff --git a/public/data/roads/817.json b/apps/web/public/data/roads/817.json similarity index 100% rename from public/data/roads/817.json rename to apps/web/public/data/roads/817.json diff --git a/public/data/roads/819.json b/apps/web/public/data/roads/819.json similarity index 100% rename from public/data/roads/819.json rename to apps/web/public/data/roads/819.json diff --git a/public/data/roads/820.json b/apps/web/public/data/roads/820.json similarity index 100% rename from public/data/roads/820.json rename to apps/web/public/data/roads/820.json diff --git a/public/data/roads/821.json b/apps/web/public/data/roads/821.json similarity index 100% rename from public/data/roads/821.json rename to apps/web/public/data/roads/821.json diff --git a/public/data/roads/822.json b/apps/web/public/data/roads/822.json similarity index 100% rename from public/data/roads/822.json rename to apps/web/public/data/roads/822.json diff --git a/public/data/roads/823.json b/apps/web/public/data/roads/823.json similarity index 100% rename from public/data/roads/823.json rename to apps/web/public/data/roads/823.json diff --git a/public/data/roads/824.json b/apps/web/public/data/roads/824.json similarity index 100% rename from public/data/roads/824.json rename to apps/web/public/data/roads/824.json diff --git a/public/data/roads/825.json b/apps/web/public/data/roads/825.json similarity index 100% rename from public/data/roads/825.json rename to apps/web/public/data/roads/825.json diff --git a/public/data/roads/826.json b/apps/web/public/data/roads/826.json similarity index 100% rename from public/data/roads/826.json rename to apps/web/public/data/roads/826.json diff --git a/public/data/roads/827.json b/apps/web/public/data/roads/827.json similarity index 100% rename from public/data/roads/827.json rename to apps/web/public/data/roads/827.json diff --git a/public/data/roads/828.json b/apps/web/public/data/roads/828.json similarity index 100% rename from public/data/roads/828.json rename to apps/web/public/data/roads/828.json diff --git a/public/data/roads/829.json b/apps/web/public/data/roads/829.json similarity index 100% rename from public/data/roads/829.json rename to apps/web/public/data/roads/829.json diff --git a/public/data/roads/830.json b/apps/web/public/data/roads/830.json similarity index 100% rename from public/data/roads/830.json rename to apps/web/public/data/roads/830.json diff --git a/public/data/roads/831.json b/apps/web/public/data/roads/831.json similarity index 100% rename from public/data/roads/831.json rename to apps/web/public/data/roads/831.json diff --git a/public/data/roads/832.json b/apps/web/public/data/roads/832.json similarity index 100% rename from public/data/roads/832.json rename to apps/web/public/data/roads/832.json diff --git a/public/data/roads/833.json b/apps/web/public/data/roads/833.json similarity index 100% rename from public/data/roads/833.json rename to apps/web/public/data/roads/833.json diff --git a/public/data/roads/840.json b/apps/web/public/data/roads/840.json similarity index 100% rename from public/data/roads/840.json rename to apps/web/public/data/roads/840.json diff --git a/public/data/roads/842.json b/apps/web/public/data/roads/842.json similarity index 100% rename from public/data/roads/842.json rename to apps/web/public/data/roads/842.json diff --git a/public/data/roads/843.json b/apps/web/public/data/roads/843.json similarity index 100% rename from public/data/roads/843.json rename to apps/web/public/data/roads/843.json diff --git a/public/data/roads/844.json b/apps/web/public/data/roads/844.json similarity index 100% rename from public/data/roads/844.json rename to apps/web/public/data/roads/844.json diff --git a/public/data/roads/845.json b/apps/web/public/data/roads/845.json similarity index 100% rename from public/data/roads/845.json rename to apps/web/public/data/roads/845.json diff --git a/public/data/roads/846.json b/apps/web/public/data/roads/846.json similarity index 100% rename from public/data/roads/846.json rename to apps/web/public/data/roads/846.json diff --git a/public/data/roads/847.json b/apps/web/public/data/roads/847.json similarity index 100% rename from public/data/roads/847.json rename to apps/web/public/data/roads/847.json diff --git a/public/data/roads/848.json b/apps/web/public/data/roads/848.json similarity index 100% rename from public/data/roads/848.json rename to apps/web/public/data/roads/848.json diff --git a/public/data/roads/849.json b/apps/web/public/data/roads/849.json similarity index 100% rename from public/data/roads/849.json rename to apps/web/public/data/roads/849.json diff --git a/public/data/roads/851.json b/apps/web/public/data/roads/851.json similarity index 100% rename from public/data/roads/851.json rename to apps/web/public/data/roads/851.json diff --git a/public/data/roads/852.json b/apps/web/public/data/roads/852.json similarity index 100% rename from public/data/roads/852.json rename to apps/web/public/data/roads/852.json diff --git a/public/data/roads/880.json b/apps/web/public/data/roads/880.json similarity index 100% rename from public/data/roads/880.json rename to apps/web/public/data/roads/880.json diff --git a/public/data/roads/881.json b/apps/web/public/data/roads/881.json similarity index 100% rename from public/data/roads/881.json rename to apps/web/public/data/roads/881.json diff --git a/public/data/roads/882.json b/apps/web/public/data/roads/882.json similarity index 100% rename from public/data/roads/882.json rename to apps/web/public/data/roads/882.json diff --git a/public/data/roads/883.json b/apps/web/public/data/roads/883.json similarity index 100% rename from public/data/roads/883.json rename to apps/web/public/data/roads/883.json diff --git a/public/data/roads/884.json b/apps/web/public/data/roads/884.json similarity index 100% rename from public/data/roads/884.json rename to apps/web/public/data/roads/884.json diff --git a/public/data/roads/885.json b/apps/web/public/data/roads/885.json similarity index 100% rename from public/data/roads/885.json rename to apps/web/public/data/roads/885.json diff --git a/public/data/roads/890.json b/apps/web/public/data/roads/890.json similarity index 100% rename from public/data/roads/890.json rename to apps/web/public/data/roads/890.json diff --git a/public/data/roads/891.json b/apps/web/public/data/roads/891.json similarity index 100% rename from public/data/roads/891.json rename to apps/web/public/data/roads/891.json diff --git a/public/data/roads/892.json b/apps/web/public/data/roads/892.json similarity index 100% rename from public/data/roads/892.json rename to apps/web/public/data/roads/892.json diff --git a/public/data/roads/893.json b/apps/web/public/data/roads/893.json similarity index 100% rename from public/data/roads/893.json rename to apps/web/public/data/roads/893.json diff --git a/public/data/roads/894.json b/apps/web/public/data/roads/894.json similarity index 100% rename from public/data/roads/894.json rename to apps/web/public/data/roads/894.json diff --git a/public/data/roads/896.json b/apps/web/public/data/roads/896.json similarity index 100% rename from public/data/roads/896.json rename to apps/web/public/data/roads/896.json diff --git a/public/data/roads/900.json b/apps/web/public/data/roads/900.json similarity index 100% rename from public/data/roads/900.json rename to apps/web/public/data/roads/900.json diff --git a/public/data/roads/901.json b/apps/web/public/data/roads/901.json similarity index 100% rename from public/data/roads/901.json rename to apps/web/public/data/roads/901.json diff --git a/public/data/roads/902.json b/apps/web/public/data/roads/902.json similarity index 100% rename from public/data/roads/902.json rename to apps/web/public/data/roads/902.json diff --git a/public/data/roads/903.json b/apps/web/public/data/roads/903.json similarity index 100% rename from public/data/roads/903.json rename to apps/web/public/data/roads/903.json diff --git a/public/data/roads/904.json b/apps/web/public/data/roads/904.json similarity index 100% rename from public/data/roads/904.json rename to apps/web/public/data/roads/904.json diff --git a/public/data/roads/905.json b/apps/web/public/data/roads/905.json similarity index 100% rename from public/data/roads/905.json rename to apps/web/public/data/roads/905.json diff --git a/public/data/roads/906.json b/apps/web/public/data/roads/906.json similarity index 100% rename from public/data/roads/906.json rename to apps/web/public/data/roads/906.json diff --git a/public/data/roads/907.json b/apps/web/public/data/roads/907.json similarity index 100% rename from public/data/roads/907.json rename to apps/web/public/data/roads/907.json diff --git a/public/data/roads/908.json b/apps/web/public/data/roads/908.json similarity index 100% rename from public/data/roads/908.json rename to apps/web/public/data/roads/908.json diff --git a/public/data/roads/909.json b/apps/web/public/data/roads/909.json similarity index 100% rename from public/data/roads/909.json rename to apps/web/public/data/roads/909.json diff --git a/public/data/roads/911.json b/apps/web/public/data/roads/911.json similarity index 100% rename from public/data/roads/911.json rename to apps/web/public/data/roads/911.json diff --git a/public/data/roads/912.json b/apps/web/public/data/roads/912.json similarity index 100% rename from public/data/roads/912.json rename to apps/web/public/data/roads/912.json diff --git a/public/data/roads/913.json b/apps/web/public/data/roads/913.json similarity index 100% rename from public/data/roads/913.json rename to apps/web/public/data/roads/913.json diff --git a/public/data/roads/920.json b/apps/web/public/data/roads/920.json similarity index 100% rename from public/data/roads/920.json rename to apps/web/public/data/roads/920.json diff --git a/public/data/roads/921.json b/apps/web/public/data/roads/921.json similarity index 100% rename from public/data/roads/921.json rename to apps/web/public/data/roads/921.json diff --git a/public/data/roads/922.json b/apps/web/public/data/roads/922.json similarity index 100% rename from public/data/roads/922.json rename to apps/web/public/data/roads/922.json diff --git a/public/data/roads/923.json b/apps/web/public/data/roads/923.json similarity index 100% rename from public/data/roads/923.json rename to apps/web/public/data/roads/923.json diff --git a/public/data/roads/924.json b/apps/web/public/data/roads/924.json similarity index 100% rename from public/data/roads/924.json rename to apps/web/public/data/roads/924.json diff --git a/public/data/roads/925.json b/apps/web/public/data/roads/925.json similarity index 100% rename from public/data/roads/925.json rename to apps/web/public/data/roads/925.json diff --git a/public/data/roads/926.json b/apps/web/public/data/roads/926.json similarity index 100% rename from public/data/roads/926.json rename to apps/web/public/data/roads/926.json diff --git a/public/data/roads/927.json b/apps/web/public/data/roads/927.json similarity index 100% rename from public/data/roads/927.json rename to apps/web/public/data/roads/927.json diff --git a/public/data/roads/928.json b/apps/web/public/data/roads/928.json similarity index 100% rename from public/data/roads/928.json rename to apps/web/public/data/roads/928.json diff --git a/public/data/roads/929.json b/apps/web/public/data/roads/929.json similarity index 100% rename from public/data/roads/929.json rename to apps/web/public/data/roads/929.json diff --git a/public/data/roads/931.json b/apps/web/public/data/roads/931.json similarity index 100% rename from public/data/roads/931.json rename to apps/web/public/data/roads/931.json diff --git a/public/data/roads/932.json b/apps/web/public/data/roads/932.json similarity index 100% rename from public/data/roads/932.json rename to apps/web/public/data/roads/932.json diff --git a/public/data/roads/940.json b/apps/web/public/data/roads/940.json similarity index 100% rename from public/data/roads/940.json rename to apps/web/public/data/roads/940.json diff --git a/public/data/roads/941.json b/apps/web/public/data/roads/941.json similarity index 100% rename from public/data/roads/941.json rename to apps/web/public/data/roads/941.json diff --git a/public/data/roads/942.json b/apps/web/public/data/roads/942.json similarity index 100% rename from public/data/roads/942.json rename to apps/web/public/data/roads/942.json diff --git a/public/data/roads/943.json b/apps/web/public/data/roads/943.json similarity index 100% rename from public/data/roads/943.json rename to apps/web/public/data/roads/943.json diff --git a/public/data/roads/944.json b/apps/web/public/data/roads/944.json similarity index 100% rename from public/data/roads/944.json rename to apps/web/public/data/roads/944.json diff --git a/public/data/roads/945.json b/apps/web/public/data/roads/945.json similarity index 100% rename from public/data/roads/945.json rename to apps/web/public/data/roads/945.json diff --git a/public/data/roads/946.json b/apps/web/public/data/roads/946.json similarity index 100% rename from public/data/roads/946.json rename to apps/web/public/data/roads/946.json diff --git a/public/data/roads/947.json b/apps/web/public/data/roads/947.json similarity index 100% rename from public/data/roads/947.json rename to apps/web/public/data/roads/947.json diff --git a/public/data/roads/950.json b/apps/web/public/data/roads/950.json similarity index 100% rename from public/data/roads/950.json rename to apps/web/public/data/roads/950.json diff --git a/public/data/roads/951.json b/apps/web/public/data/roads/951.json similarity index 100% rename from public/data/roads/951.json rename to apps/web/public/data/roads/951.json diff --git a/public/data/roads/952.json b/apps/web/public/data/roads/952.json similarity index 100% rename from public/data/roads/952.json rename to apps/web/public/data/roads/952.json diff --git a/public/data/roads/953.json b/apps/web/public/data/roads/953.json similarity index 100% rename from public/data/roads/953.json rename to apps/web/public/data/roads/953.json diff --git a/public/data/roads/954.json b/apps/web/public/data/roads/954.json similarity index 100% rename from public/data/roads/954.json rename to apps/web/public/data/roads/954.json diff --git a/public/data/roads/955.json b/apps/web/public/data/roads/955.json similarity index 100% rename from public/data/roads/955.json rename to apps/web/public/data/roads/955.json diff --git a/public/data/roads/956.json b/apps/web/public/data/roads/956.json similarity index 100% rename from public/data/roads/956.json rename to apps/web/public/data/roads/956.json diff --git a/public/data/roads/957.json b/apps/web/public/data/roads/957.json similarity index 100% rename from public/data/roads/957.json rename to apps/web/public/data/roads/957.json diff --git a/public/data/roads/958.json b/apps/web/public/data/roads/958.json similarity index 100% rename from public/data/roads/958.json rename to apps/web/public/data/roads/958.json diff --git a/public/data/roads/959.json b/apps/web/public/data/roads/959.json similarity index 100% rename from public/data/roads/959.json rename to apps/web/public/data/roads/959.json diff --git a/public/data/roads/961.json b/apps/web/public/data/roads/961.json similarity index 100% rename from public/data/roads/961.json rename to apps/web/public/data/roads/961.json diff --git a/public/data/roads/962.json b/apps/web/public/data/roads/962.json similarity index 100% rename from public/data/roads/962.json rename to apps/web/public/data/roads/962.json diff --git a/public/data/roads/963.json b/apps/web/public/data/roads/963.json similarity index 100% rename from public/data/roads/963.json rename to apps/web/public/data/roads/963.json diff --git a/public/data/roads/964.json b/apps/web/public/data/roads/964.json similarity index 100% rename from public/data/roads/964.json rename to apps/web/public/data/roads/964.json diff --git a/public/data/roads/965.json b/apps/web/public/data/roads/965.json similarity index 100% rename from public/data/roads/965.json rename to apps/web/public/data/roads/965.json diff --git a/public/data/roads/966.json b/apps/web/public/data/roads/966.json similarity index 100% rename from public/data/roads/966.json rename to apps/web/public/data/roads/966.json diff --git a/public/data/roads/970.json b/apps/web/public/data/roads/970.json similarity index 100% rename from public/data/roads/970.json rename to apps/web/public/data/roads/970.json diff --git a/public/data/roads/971.json b/apps/web/public/data/roads/971.json similarity index 100% rename from public/data/roads/971.json rename to apps/web/public/data/roads/971.json diff --git a/public/data/roads/972.json b/apps/web/public/data/roads/972.json similarity index 100% rename from public/data/roads/972.json rename to apps/web/public/data/roads/972.json diff --git a/public/data/roads/973.json b/apps/web/public/data/roads/973.json similarity index 100% rename from public/data/roads/973.json rename to apps/web/public/data/roads/973.json diff --git a/public/data/roads/974.json b/apps/web/public/data/roads/974.json similarity index 100% rename from public/data/roads/974.json rename to apps/web/public/data/roads/974.json diff --git a/public/data/roads/975.json b/apps/web/public/data/roads/975.json similarity index 100% rename from public/data/roads/975.json rename to apps/web/public/data/roads/975.json diff --git a/public/data/roads/976.json b/apps/web/public/data/roads/976.json similarity index 100% rename from public/data/roads/976.json rename to apps/web/public/data/roads/976.json diff --git a/public/data/roads/977.json b/apps/web/public/data/roads/977.json similarity index 100% rename from public/data/roads/977.json rename to apps/web/public/data/roads/977.json diff --git a/public/data/roads/978.json b/apps/web/public/data/roads/978.json similarity index 100% rename from public/data/roads/978.json rename to apps/web/public/data/roads/978.json diff --git a/public/data/roads/979.json b/apps/web/public/data/roads/979.json similarity index 100% rename from public/data/roads/979.json rename to apps/web/public/data/roads/979.json diff --git a/public/data/roads/981.json b/apps/web/public/data/roads/981.json similarity index 100% rename from public/data/roads/981.json rename to apps/web/public/data/roads/981.json diff --git a/public/data/roads/982.json b/apps/web/public/data/roads/982.json similarity index 100% rename from public/data/roads/982.json rename to apps/web/public/data/roads/982.json diff --git a/public/data/roads/983.json b/apps/web/public/data/roads/983.json similarity index 100% rename from public/data/roads/983.json rename to apps/web/public/data/roads/983.json diff --git a/public/data/styles/dark-matter-neutral.json b/apps/web/public/data/styles/dark-matter-neutral.json similarity index 100% rename from public/data/styles/dark-matter-neutral.json rename to apps/web/public/data/styles/dark-matter-neutral.json diff --git a/public/data/styles/positron-neutral.json b/apps/web/public/data/styles/positron-neutral.json similarity index 100% rename from public/data/styles/positron-neutral.json rename to apps/web/public/data/styles/positron-neutral.json diff --git a/public/data/zip-ranges/100.json b/apps/web/public/data/zip-ranges/100.json similarity index 100% rename from public/data/zip-ranges/100.json rename to apps/web/public/data/zip-ranges/100.json diff --git a/public/data/zip-ranges/103.json b/apps/web/public/data/zip-ranges/103.json similarity index 100% rename from public/data/zip-ranges/103.json rename to apps/web/public/data/zip-ranges/103.json diff --git a/public/data/zip-ranges/104.json b/apps/web/public/data/zip-ranges/104.json similarity index 100% rename from public/data/zip-ranges/104.json rename to apps/web/public/data/zip-ranges/104.json diff --git a/public/data/zip-ranges/105.json b/apps/web/public/data/zip-ranges/105.json similarity index 100% rename from public/data/zip-ranges/105.json rename to apps/web/public/data/zip-ranges/105.json diff --git a/public/data/zip-ranges/106.json b/apps/web/public/data/zip-ranges/106.json similarity index 100% rename from public/data/zip-ranges/106.json rename to apps/web/public/data/zip-ranges/106.json diff --git a/public/data/zip-ranges/108.json b/apps/web/public/data/zip-ranges/108.json similarity index 100% rename from public/data/zip-ranges/108.json rename to apps/web/public/data/zip-ranges/108.json diff --git a/public/data/zip-ranges/110.json b/apps/web/public/data/zip-ranges/110.json similarity index 100% rename from public/data/zip-ranges/110.json rename to apps/web/public/data/zip-ranges/110.json diff --git a/public/data/zip-ranges/111.json b/apps/web/public/data/zip-ranges/111.json similarity index 100% rename from public/data/zip-ranges/111.json rename to apps/web/public/data/zip-ranges/111.json diff --git a/public/data/zip-ranges/112.json b/apps/web/public/data/zip-ranges/112.json similarity index 100% rename from public/data/zip-ranges/112.json rename to apps/web/public/data/zip-ranges/112.json diff --git a/public/data/zip-ranges/114.json b/apps/web/public/data/zip-ranges/114.json similarity index 100% rename from public/data/zip-ranges/114.json rename to apps/web/public/data/zip-ranges/114.json diff --git a/public/data/zip-ranges/115.json b/apps/web/public/data/zip-ranges/115.json similarity index 100% rename from public/data/zip-ranges/115.json rename to apps/web/public/data/zip-ranges/115.json diff --git a/public/data/zip-ranges/116.json b/apps/web/public/data/zip-ranges/116.json similarity index 100% rename from public/data/zip-ranges/116.json rename to apps/web/public/data/zip-ranges/116.json diff --git a/public/data/zip-ranges/200.json b/apps/web/public/data/zip-ranges/200.json similarity index 100% rename from public/data/zip-ranges/200.json rename to apps/web/public/data/zip-ranges/200.json diff --git a/public/data/zip-ranges/201.json b/apps/web/public/data/zip-ranges/201.json similarity index 100% rename from public/data/zip-ranges/201.json rename to apps/web/public/data/zip-ranges/201.json diff --git a/public/data/zip-ranges/202.json b/apps/web/public/data/zip-ranges/202.json similarity index 100% rename from public/data/zip-ranges/202.json rename to apps/web/public/data/zip-ranges/202.json diff --git a/public/data/zip-ranges/203.json b/apps/web/public/data/zip-ranges/203.json similarity index 100% rename from public/data/zip-ranges/203.json rename to apps/web/public/data/zip-ranges/203.json diff --git a/public/data/zip-ranges/204.json b/apps/web/public/data/zip-ranges/204.json similarity index 100% rename from public/data/zip-ranges/204.json rename to apps/web/public/data/zip-ranges/204.json diff --git a/public/data/zip-ranges/205.json b/apps/web/public/data/zip-ranges/205.json similarity index 100% rename from public/data/zip-ranges/205.json rename to apps/web/public/data/zip-ranges/205.json diff --git a/public/data/zip-ranges/206.json b/apps/web/public/data/zip-ranges/206.json similarity index 100% rename from public/data/zip-ranges/206.json rename to apps/web/public/data/zip-ranges/206.json diff --git a/public/data/zip-ranges/207.json b/apps/web/public/data/zip-ranges/207.json similarity index 100% rename from public/data/zip-ranges/207.json rename to apps/web/public/data/zip-ranges/207.json diff --git a/public/data/zip-ranges/208.json b/apps/web/public/data/zip-ranges/208.json similarity index 100% rename from public/data/zip-ranges/208.json rename to apps/web/public/data/zip-ranges/208.json diff --git a/public/data/zip-ranges/209.json b/apps/web/public/data/zip-ranges/209.json similarity index 100% rename from public/data/zip-ranges/209.json rename to apps/web/public/data/zip-ranges/209.json diff --git a/public/data/zip-ranges/210.json b/apps/web/public/data/zip-ranges/210.json similarity index 100% rename from public/data/zip-ranges/210.json rename to apps/web/public/data/zip-ranges/210.json diff --git a/public/data/zip-ranges/211.json b/apps/web/public/data/zip-ranges/211.json similarity index 100% rename from public/data/zip-ranges/211.json rename to apps/web/public/data/zip-ranges/211.json diff --git a/public/data/zip-ranges/212.json b/apps/web/public/data/zip-ranges/212.json similarity index 100% rename from public/data/zip-ranges/212.json rename to apps/web/public/data/zip-ranges/212.json diff --git a/public/data/zip-ranges/220.json b/apps/web/public/data/zip-ranges/220.json similarity index 100% rename from public/data/zip-ranges/220.json rename to apps/web/public/data/zip-ranges/220.json diff --git a/public/data/zip-ranges/221.json b/apps/web/public/data/zip-ranges/221.json similarity index 100% rename from public/data/zip-ranges/221.json rename to apps/web/public/data/zip-ranges/221.json diff --git a/public/data/zip-ranges/222.json b/apps/web/public/data/zip-ranges/222.json similarity index 100% rename from public/data/zip-ranges/222.json rename to apps/web/public/data/zip-ranges/222.json diff --git a/public/data/zip-ranges/223.json b/apps/web/public/data/zip-ranges/223.json similarity index 100% rename from public/data/zip-ranges/223.json rename to apps/web/public/data/zip-ranges/223.json diff --git a/public/data/zip-ranges/224.json b/apps/web/public/data/zip-ranges/224.json similarity index 100% rename from public/data/zip-ranges/224.json rename to apps/web/public/data/zip-ranges/224.json diff --git a/public/data/zip-ranges/226.json b/apps/web/public/data/zip-ranges/226.json similarity index 100% rename from public/data/zip-ranges/226.json rename to apps/web/public/data/zip-ranges/226.json diff --git a/public/data/zip-ranges/227.json b/apps/web/public/data/zip-ranges/227.json similarity index 100% rename from public/data/zip-ranges/227.json rename to apps/web/public/data/zip-ranges/227.json diff --git a/public/data/zip-ranges/228.json b/apps/web/public/data/zip-ranges/228.json similarity index 100% rename from public/data/zip-ranges/228.json rename to apps/web/public/data/zip-ranges/228.json diff --git a/public/data/zip-ranges/231.json b/apps/web/public/data/zip-ranges/231.json similarity index 100% rename from public/data/zip-ranges/231.json rename to apps/web/public/data/zip-ranges/231.json diff --git a/public/data/zip-ranges/232.json b/apps/web/public/data/zip-ranges/232.json similarity index 100% rename from public/data/zip-ranges/232.json rename to apps/web/public/data/zip-ranges/232.json diff --git a/public/data/zip-ranges/233.json b/apps/web/public/data/zip-ranges/233.json similarity index 100% rename from public/data/zip-ranges/233.json rename to apps/web/public/data/zip-ranges/233.json diff --git a/public/data/zip-ranges/234.json b/apps/web/public/data/zip-ranges/234.json similarity index 100% rename from public/data/zip-ranges/234.json rename to apps/web/public/data/zip-ranges/234.json diff --git a/public/data/zip-ranges/235.json b/apps/web/public/data/zip-ranges/235.json similarity index 100% rename from public/data/zip-ranges/235.json rename to apps/web/public/data/zip-ranges/235.json diff --git a/public/data/zip-ranges/236.json b/apps/web/public/data/zip-ranges/236.json similarity index 100% rename from public/data/zip-ranges/236.json rename to apps/web/public/data/zip-ranges/236.json diff --git a/public/data/zip-ranges/237.json b/apps/web/public/data/zip-ranges/237.json similarity index 100% rename from public/data/zip-ranges/237.json rename to apps/web/public/data/zip-ranges/237.json diff --git a/public/data/zip-ranges/238.json b/apps/web/public/data/zip-ranges/238.json similarity index 100% rename from public/data/zip-ranges/238.json rename to apps/web/public/data/zip-ranges/238.json diff --git a/public/data/zip-ranges/239.json b/apps/web/public/data/zip-ranges/239.json similarity index 100% rename from public/data/zip-ranges/239.json rename to apps/web/public/data/zip-ranges/239.json diff --git a/public/data/zip-ranges/241.json b/apps/web/public/data/zip-ranges/241.json similarity index 100% rename from public/data/zip-ranges/241.json rename to apps/web/public/data/zip-ranges/241.json diff --git a/public/data/zip-ranges/242.json b/apps/web/public/data/zip-ranges/242.json similarity index 100% rename from public/data/zip-ranges/242.json rename to apps/web/public/data/zip-ranges/242.json diff --git a/public/data/zip-ranges/243.json b/apps/web/public/data/zip-ranges/243.json similarity index 100% rename from public/data/zip-ranges/243.json rename to apps/web/public/data/zip-ranges/243.json diff --git a/public/data/zip-ranges/244.json b/apps/web/public/data/zip-ranges/244.json similarity index 100% rename from public/data/zip-ranges/244.json rename to apps/web/public/data/zip-ranges/244.json diff --git a/public/data/zip-ranges/247.json b/apps/web/public/data/zip-ranges/247.json similarity index 100% rename from public/data/zip-ranges/247.json rename to apps/web/public/data/zip-ranges/247.json diff --git a/public/data/zip-ranges/248.json b/apps/web/public/data/zip-ranges/248.json similarity index 100% rename from public/data/zip-ranges/248.json rename to apps/web/public/data/zip-ranges/248.json diff --git a/public/data/zip-ranges/249.json b/apps/web/public/data/zip-ranges/249.json similarity index 100% rename from public/data/zip-ranges/249.json rename to apps/web/public/data/zip-ranges/249.json diff --git a/public/data/zip-ranges/251.json b/apps/web/public/data/zip-ranges/251.json similarity index 100% rename from public/data/zip-ranges/251.json rename to apps/web/public/data/zip-ranges/251.json diff --git a/public/data/zip-ranges/252.json b/apps/web/public/data/zip-ranges/252.json similarity index 100% rename from public/data/zip-ranges/252.json rename to apps/web/public/data/zip-ranges/252.json diff --git a/public/data/zip-ranges/253.json b/apps/web/public/data/zip-ranges/253.json similarity index 100% rename from public/data/zip-ranges/253.json rename to apps/web/public/data/zip-ranges/253.json diff --git a/public/data/zip-ranges/260.json b/apps/web/public/data/zip-ranges/260.json similarity index 100% rename from public/data/zip-ranges/260.json rename to apps/web/public/data/zip-ranges/260.json diff --git a/public/data/zip-ranges/261.json b/apps/web/public/data/zip-ranges/261.json similarity index 100% rename from public/data/zip-ranges/261.json rename to apps/web/public/data/zip-ranges/261.json diff --git a/public/data/zip-ranges/262.json b/apps/web/public/data/zip-ranges/262.json similarity index 100% rename from public/data/zip-ranges/262.json rename to apps/web/public/data/zip-ranges/262.json diff --git a/public/data/zip-ranges/263.json b/apps/web/public/data/zip-ranges/263.json similarity index 100% rename from public/data/zip-ranges/263.json rename to apps/web/public/data/zip-ranges/263.json diff --git a/public/data/zip-ranges/264.json b/apps/web/public/data/zip-ranges/264.json similarity index 100% rename from public/data/zip-ranges/264.json rename to apps/web/public/data/zip-ranges/264.json diff --git a/public/data/zip-ranges/265.json b/apps/web/public/data/zip-ranges/265.json similarity index 100% rename from public/data/zip-ranges/265.json rename to apps/web/public/data/zip-ranges/265.json diff --git a/public/data/zip-ranges/266.json b/apps/web/public/data/zip-ranges/266.json similarity index 100% rename from public/data/zip-ranges/266.json rename to apps/web/public/data/zip-ranges/266.json diff --git a/public/data/zip-ranges/267.json b/apps/web/public/data/zip-ranges/267.json similarity index 100% rename from public/data/zip-ranges/267.json rename to apps/web/public/data/zip-ranges/267.json diff --git a/public/data/zip-ranges/268.json b/apps/web/public/data/zip-ranges/268.json similarity index 100% rename from public/data/zip-ranges/268.json rename to apps/web/public/data/zip-ranges/268.json diff --git a/public/data/zip-ranges/269.json b/apps/web/public/data/zip-ranges/269.json similarity index 100% rename from public/data/zip-ranges/269.json rename to apps/web/public/data/zip-ranges/269.json diff --git a/public/data/zip-ranges/270.json b/apps/web/public/data/zip-ranges/270.json similarity index 100% rename from public/data/zip-ranges/270.json rename to apps/web/public/data/zip-ranges/270.json diff --git a/public/data/zip-ranges/272.json b/apps/web/public/data/zip-ranges/272.json similarity index 100% rename from public/data/zip-ranges/272.json rename to apps/web/public/data/zip-ranges/272.json diff --git a/public/data/zip-ranges/290.json b/apps/web/public/data/zip-ranges/290.json similarity index 100% rename from public/data/zip-ranges/290.json rename to apps/web/public/data/zip-ranges/290.json diff --git a/public/data/zip-ranges/300.json b/apps/web/public/data/zip-ranges/300.json similarity index 100% rename from public/data/zip-ranges/300.json rename to apps/web/public/data/zip-ranges/300.json diff --git a/public/data/zip-ranges/301.json b/apps/web/public/data/zip-ranges/301.json similarity index 100% rename from public/data/zip-ranges/301.json rename to apps/web/public/data/zip-ranges/301.json diff --git a/public/data/zip-ranges/302.json b/apps/web/public/data/zip-ranges/302.json similarity index 100% rename from public/data/zip-ranges/302.json rename to apps/web/public/data/zip-ranges/302.json diff --git a/public/data/zip-ranges/303.json b/apps/web/public/data/zip-ranges/303.json similarity index 100% rename from public/data/zip-ranges/303.json rename to apps/web/public/data/zip-ranges/303.json diff --git a/public/data/zip-ranges/304.json b/apps/web/public/data/zip-ranges/304.json similarity index 100% rename from public/data/zip-ranges/304.json rename to apps/web/public/data/zip-ranges/304.json diff --git a/public/data/zip-ranges/305.json b/apps/web/public/data/zip-ranges/305.json similarity index 100% rename from public/data/zip-ranges/305.json rename to apps/web/public/data/zip-ranges/305.json diff --git a/public/data/zip-ranges/306.json b/apps/web/public/data/zip-ranges/306.json similarity index 100% rename from public/data/zip-ranges/306.json rename to apps/web/public/data/zip-ranges/306.json diff --git a/public/data/zip-ranges/307.json b/apps/web/public/data/zip-ranges/307.json similarity index 100% rename from public/data/zip-ranges/307.json rename to apps/web/public/data/zip-ranges/307.json diff --git a/public/data/zip-ranges/308.json b/apps/web/public/data/zip-ranges/308.json similarity index 100% rename from public/data/zip-ranges/308.json rename to apps/web/public/data/zip-ranges/308.json diff --git a/public/data/zip-ranges/309.json b/apps/web/public/data/zip-ranges/309.json similarity index 100% rename from public/data/zip-ranges/309.json rename to apps/web/public/data/zip-ranges/309.json diff --git a/public/data/zip-ranges/310.json b/apps/web/public/data/zip-ranges/310.json similarity index 100% rename from public/data/zip-ranges/310.json rename to apps/web/public/data/zip-ranges/310.json diff --git a/public/data/zip-ranges/311.json b/apps/web/public/data/zip-ranges/311.json similarity index 100% rename from public/data/zip-ranges/311.json rename to apps/web/public/data/zip-ranges/311.json diff --git a/public/data/zip-ranges/312.json b/apps/web/public/data/zip-ranges/312.json similarity index 100% rename from public/data/zip-ranges/312.json rename to apps/web/public/data/zip-ranges/312.json diff --git a/public/data/zip-ranges/313.json b/apps/web/public/data/zip-ranges/313.json similarity index 100% rename from public/data/zip-ranges/313.json rename to apps/web/public/data/zip-ranges/313.json diff --git a/public/data/zip-ranges/314.json b/apps/web/public/data/zip-ranges/314.json similarity index 100% rename from public/data/zip-ranges/314.json rename to apps/web/public/data/zip-ranges/314.json diff --git a/public/data/zip-ranges/315.json b/apps/web/public/data/zip-ranges/315.json similarity index 100% rename from public/data/zip-ranges/315.json rename to apps/web/public/data/zip-ranges/315.json diff --git a/public/data/zip-ranges/320.json b/apps/web/public/data/zip-ranges/320.json similarity index 100% rename from public/data/zip-ranges/320.json rename to apps/web/public/data/zip-ranges/320.json diff --git a/public/data/zip-ranges/324.json b/apps/web/public/data/zip-ranges/324.json similarity index 100% rename from public/data/zip-ranges/324.json rename to apps/web/public/data/zip-ranges/324.json diff --git a/public/data/zip-ranges/325.json b/apps/web/public/data/zip-ranges/325.json similarity index 100% rename from public/data/zip-ranges/325.json rename to apps/web/public/data/zip-ranges/325.json diff --git a/public/data/zip-ranges/326.json b/apps/web/public/data/zip-ranges/326.json similarity index 100% rename from public/data/zip-ranges/326.json rename to apps/web/public/data/zip-ranges/326.json diff --git a/public/data/zip-ranges/327.json b/apps/web/public/data/zip-ranges/327.json similarity index 100% rename from public/data/zip-ranges/327.json rename to apps/web/public/data/zip-ranges/327.json diff --git a/public/data/zip-ranges/328.json b/apps/web/public/data/zip-ranges/328.json similarity index 100% rename from public/data/zip-ranges/328.json rename to apps/web/public/data/zip-ranges/328.json diff --git a/public/data/zip-ranges/330.json b/apps/web/public/data/zip-ranges/330.json similarity index 100% rename from public/data/zip-ranges/330.json rename to apps/web/public/data/zip-ranges/330.json diff --git a/public/data/zip-ranges/333.json b/apps/web/public/data/zip-ranges/333.json similarity index 100% rename from public/data/zip-ranges/333.json rename to apps/web/public/data/zip-ranges/333.json diff --git a/public/data/zip-ranges/334.json b/apps/web/public/data/zip-ranges/334.json similarity index 100% rename from public/data/zip-ranges/334.json rename to apps/web/public/data/zip-ranges/334.json diff --git a/public/data/zip-ranges/335.json b/apps/web/public/data/zip-ranges/335.json similarity index 100% rename from public/data/zip-ranges/335.json rename to apps/web/public/data/zip-ranges/335.json diff --git a/public/data/zip-ranges/336.json b/apps/web/public/data/zip-ranges/336.json similarity index 100% rename from public/data/zip-ranges/336.json rename to apps/web/public/data/zip-ranges/336.json diff --git a/public/data/zip-ranges/337.json b/apps/web/public/data/zip-ranges/337.json similarity index 100% rename from public/data/zip-ranges/337.json rename to apps/web/public/data/zip-ranges/337.json diff --git a/public/data/zip-ranges/338.json b/apps/web/public/data/zip-ranges/338.json similarity index 100% rename from public/data/zip-ranges/338.json rename to apps/web/public/data/zip-ranges/338.json diff --git a/public/data/zip-ranges/350.json b/apps/web/public/data/zip-ranges/350.json similarity index 100% rename from public/data/zip-ranges/350.json rename to apps/web/public/data/zip-ranges/350.json diff --git a/public/data/zip-ranges/351.json b/apps/web/public/data/zip-ranges/351.json similarity index 100% rename from public/data/zip-ranges/351.json rename to apps/web/public/data/zip-ranges/351.json diff --git a/public/data/zip-ranges/352.json b/apps/web/public/data/zip-ranges/352.json similarity index 100% rename from public/data/zip-ranges/352.json rename to apps/web/public/data/zip-ranges/352.json diff --git a/public/data/zip-ranges/353.json b/apps/web/public/data/zip-ranges/353.json similarity index 100% rename from public/data/zip-ranges/353.json rename to apps/web/public/data/zip-ranges/353.json diff --git a/public/data/zip-ranges/354.json b/apps/web/public/data/zip-ranges/354.json similarity index 100% rename from public/data/zip-ranges/354.json rename to apps/web/public/data/zip-ranges/354.json diff --git a/public/data/zip-ranges/356.json b/apps/web/public/data/zip-ranges/356.json similarity index 100% rename from public/data/zip-ranges/356.json rename to apps/web/public/data/zip-ranges/356.json diff --git a/public/data/zip-ranges/357.json b/apps/web/public/data/zip-ranges/357.json similarity index 100% rename from public/data/zip-ranges/357.json rename to apps/web/public/data/zip-ranges/357.json diff --git a/public/data/zip-ranges/358.json b/apps/web/public/data/zip-ranges/358.json similarity index 100% rename from public/data/zip-ranges/358.json rename to apps/web/public/data/zip-ranges/358.json diff --git a/public/data/zip-ranges/360.json b/apps/web/public/data/zip-ranges/360.json similarity index 100% rename from public/data/zip-ranges/360.json rename to apps/web/public/data/zip-ranges/360.json diff --git a/public/data/zip-ranges/361.json b/apps/web/public/data/zip-ranges/361.json similarity index 100% rename from public/data/zip-ranges/361.json rename to apps/web/public/data/zip-ranges/361.json diff --git a/public/data/zip-ranges/362.json b/apps/web/public/data/zip-ranges/362.json similarity index 100% rename from public/data/zip-ranges/362.json rename to apps/web/public/data/zip-ranges/362.json diff --git a/public/data/zip-ranges/363.json b/apps/web/public/data/zip-ranges/363.json similarity index 100% rename from public/data/zip-ranges/363.json rename to apps/web/public/data/zip-ranges/363.json diff --git a/public/data/zip-ranges/364.json b/apps/web/public/data/zip-ranges/364.json similarity index 100% rename from public/data/zip-ranges/364.json rename to apps/web/public/data/zip-ranges/364.json diff --git a/public/data/zip-ranges/365.json b/apps/web/public/data/zip-ranges/365.json similarity index 100% rename from public/data/zip-ranges/365.json rename to apps/web/public/data/zip-ranges/365.json diff --git a/public/data/zip-ranges/366.json b/apps/web/public/data/zip-ranges/366.json similarity index 100% rename from public/data/zip-ranges/366.json rename to apps/web/public/data/zip-ranges/366.json diff --git a/public/data/zip-ranges/367.json b/apps/web/public/data/zip-ranges/367.json similarity index 100% rename from public/data/zip-ranges/367.json rename to apps/web/public/data/zip-ranges/367.json diff --git a/public/data/zip-ranges/368.json b/apps/web/public/data/zip-ranges/368.json similarity index 100% rename from public/data/zip-ranges/368.json rename to apps/web/public/data/zip-ranges/368.json diff --git a/public/data/zip-ranges/369.json b/apps/web/public/data/zip-ranges/369.json similarity index 100% rename from public/data/zip-ranges/369.json rename to apps/web/public/data/zip-ranges/369.json diff --git a/public/data/zip-ranges/400.json b/apps/web/public/data/zip-ranges/400.json similarity index 100% rename from public/data/zip-ranges/400.json rename to apps/web/public/data/zip-ranges/400.json diff --git a/public/data/zip-ranges/401.json b/apps/web/public/data/zip-ranges/401.json similarity index 100% rename from public/data/zip-ranges/401.json rename to apps/web/public/data/zip-ranges/401.json diff --git a/public/data/zip-ranges/402.json b/apps/web/public/data/zip-ranges/402.json similarity index 100% rename from public/data/zip-ranges/402.json rename to apps/web/public/data/zip-ranges/402.json diff --git a/public/data/zip-ranges/403.json b/apps/web/public/data/zip-ranges/403.json similarity index 100% rename from public/data/zip-ranges/403.json rename to apps/web/public/data/zip-ranges/403.json diff --git a/public/data/zip-ranges/404.json b/apps/web/public/data/zip-ranges/404.json similarity index 100% rename from public/data/zip-ranges/404.json rename to apps/web/public/data/zip-ranges/404.json diff --git a/public/data/zip-ranges/406.json b/apps/web/public/data/zip-ranges/406.json similarity index 100% rename from public/data/zip-ranges/406.json rename to apps/web/public/data/zip-ranges/406.json diff --git a/public/data/zip-ranges/407.json b/apps/web/public/data/zip-ranges/407.json similarity index 100% rename from public/data/zip-ranges/407.json rename to apps/web/public/data/zip-ranges/407.json diff --git a/public/data/zip-ranges/408.json b/apps/web/public/data/zip-ranges/408.json similarity index 100% rename from public/data/zip-ranges/408.json rename to apps/web/public/data/zip-ranges/408.json diff --git a/public/data/zip-ranges/411.json b/apps/web/public/data/zip-ranges/411.json similarity index 100% rename from public/data/zip-ranges/411.json rename to apps/web/public/data/zip-ranges/411.json diff --git a/public/data/zip-ranges/412.json b/apps/web/public/data/zip-ranges/412.json similarity index 100% rename from public/data/zip-ranges/412.json rename to apps/web/public/data/zip-ranges/412.json diff --git a/public/data/zip-ranges/413.json b/apps/web/public/data/zip-ranges/413.json similarity index 100% rename from public/data/zip-ranges/413.json rename to apps/web/public/data/zip-ranges/413.json diff --git a/public/data/zip-ranges/414.json b/apps/web/public/data/zip-ranges/414.json similarity index 100% rename from public/data/zip-ranges/414.json rename to apps/web/public/data/zip-ranges/414.json diff --git a/public/data/zip-ranges/420.json b/apps/web/public/data/zip-ranges/420.json similarity index 100% rename from public/data/zip-ranges/420.json rename to apps/web/public/data/zip-ranges/420.json diff --git a/public/data/zip-ranges/421.json b/apps/web/public/data/zip-ranges/421.json similarity index 100% rename from public/data/zip-ranges/421.json rename to apps/web/public/data/zip-ranges/421.json diff --git a/public/data/zip-ranges/422.json b/apps/web/public/data/zip-ranges/422.json similarity index 100% rename from public/data/zip-ranges/422.json rename to apps/web/public/data/zip-ranges/422.json diff --git a/public/data/zip-ranges/423.json b/apps/web/public/data/zip-ranges/423.json similarity index 100% rename from public/data/zip-ranges/423.json rename to apps/web/public/data/zip-ranges/423.json diff --git a/public/data/zip-ranges/424.json b/apps/web/public/data/zip-ranges/424.json similarity index 100% rename from public/data/zip-ranges/424.json rename to apps/web/public/data/zip-ranges/424.json diff --git a/public/data/zip-ranges/426.json b/apps/web/public/data/zip-ranges/426.json similarity index 100% rename from public/data/zip-ranges/426.json rename to apps/web/public/data/zip-ranges/426.json diff --git a/public/data/zip-ranges/427.json b/apps/web/public/data/zip-ranges/427.json similarity index 100% rename from public/data/zip-ranges/427.json rename to apps/web/public/data/zip-ranges/427.json diff --git a/public/data/zip-ranges/428.json b/apps/web/public/data/zip-ranges/428.json similarity index 100% rename from public/data/zip-ranges/428.json rename to apps/web/public/data/zip-ranges/428.json diff --git a/public/data/zip-ranges/429.json b/apps/web/public/data/zip-ranges/429.json similarity index 100% rename from public/data/zip-ranges/429.json rename to apps/web/public/data/zip-ranges/429.json diff --git a/public/data/zip-ranges/432.json b/apps/web/public/data/zip-ranges/432.json similarity index 100% rename from public/data/zip-ranges/432.json rename to apps/web/public/data/zip-ranges/432.json diff --git a/public/data/zip-ranges/433.json b/apps/web/public/data/zip-ranges/433.json similarity index 100% rename from public/data/zip-ranges/433.json rename to apps/web/public/data/zip-ranges/433.json diff --git a/public/data/zip-ranges/434.json b/apps/web/public/data/zip-ranges/434.json similarity index 100% rename from public/data/zip-ranges/434.json rename to apps/web/public/data/zip-ranges/434.json diff --git a/public/data/zip-ranges/435.json b/apps/web/public/data/zip-ranges/435.json similarity index 100% rename from public/data/zip-ranges/435.json rename to apps/web/public/data/zip-ranges/435.json diff --git a/public/data/zip-ranges/436.json b/apps/web/public/data/zip-ranges/436.json similarity index 100% rename from public/data/zip-ranges/436.json rename to apps/web/public/data/zip-ranges/436.json diff --git a/public/data/zip-ranges/437.json b/apps/web/public/data/zip-ranges/437.json similarity index 100% rename from public/data/zip-ranges/437.json rename to apps/web/public/data/zip-ranges/437.json diff --git a/public/data/zip-ranges/438.json b/apps/web/public/data/zip-ranges/438.json similarity index 100% rename from public/data/zip-ranges/438.json rename to apps/web/public/data/zip-ranges/438.json diff --git a/public/data/zip-ranges/439.json b/apps/web/public/data/zip-ranges/439.json similarity index 100% rename from public/data/zip-ranges/439.json rename to apps/web/public/data/zip-ranges/439.json diff --git a/public/data/zip-ranges/500.json b/apps/web/public/data/zip-ranges/500.json similarity index 100% rename from public/data/zip-ranges/500.json rename to apps/web/public/data/zip-ranges/500.json diff --git a/public/data/zip-ranges/502.json b/apps/web/public/data/zip-ranges/502.json similarity index 100% rename from public/data/zip-ranges/502.json rename to apps/web/public/data/zip-ranges/502.json diff --git a/public/data/zip-ranges/503.json b/apps/web/public/data/zip-ranges/503.json similarity index 100% rename from public/data/zip-ranges/503.json rename to apps/web/public/data/zip-ranges/503.json diff --git a/public/data/zip-ranges/504.json b/apps/web/public/data/zip-ranges/504.json similarity index 100% rename from public/data/zip-ranges/504.json rename to apps/web/public/data/zip-ranges/504.json diff --git a/public/data/zip-ranges/505.json b/apps/web/public/data/zip-ranges/505.json similarity index 100% rename from public/data/zip-ranges/505.json rename to apps/web/public/data/zip-ranges/505.json diff --git a/public/data/zip-ranges/506.json b/apps/web/public/data/zip-ranges/506.json similarity index 100% rename from public/data/zip-ranges/506.json rename to apps/web/public/data/zip-ranges/506.json diff --git a/public/data/zip-ranges/507.json b/apps/web/public/data/zip-ranges/507.json similarity index 100% rename from public/data/zip-ranges/507.json rename to apps/web/public/data/zip-ranges/507.json diff --git a/public/data/zip-ranges/508.json b/apps/web/public/data/zip-ranges/508.json similarity index 100% rename from public/data/zip-ranges/508.json rename to apps/web/public/data/zip-ranges/508.json diff --git a/public/data/zip-ranges/509.json b/apps/web/public/data/zip-ranges/509.json similarity index 100% rename from public/data/zip-ranges/509.json rename to apps/web/public/data/zip-ranges/509.json diff --git a/public/data/zip-ranges/510.json b/apps/web/public/data/zip-ranges/510.json similarity index 100% rename from public/data/zip-ranges/510.json rename to apps/web/public/data/zip-ranges/510.json diff --git a/public/data/zip-ranges/511.json b/apps/web/public/data/zip-ranges/511.json similarity index 100% rename from public/data/zip-ranges/511.json rename to apps/web/public/data/zip-ranges/511.json diff --git a/public/data/zip-ranges/512.json b/apps/web/public/data/zip-ranges/512.json similarity index 100% rename from public/data/zip-ranges/512.json rename to apps/web/public/data/zip-ranges/512.json diff --git a/public/data/zip-ranges/513.json b/apps/web/public/data/zip-ranges/513.json similarity index 100% rename from public/data/zip-ranges/513.json rename to apps/web/public/data/zip-ranges/513.json diff --git a/public/data/zip-ranges/514.json b/apps/web/public/data/zip-ranges/514.json similarity index 100% rename from public/data/zip-ranges/514.json rename to apps/web/public/data/zip-ranges/514.json diff --git a/public/data/zip-ranges/515.json b/apps/web/public/data/zip-ranges/515.json similarity index 100% rename from public/data/zip-ranges/515.json rename to apps/web/public/data/zip-ranges/515.json diff --git a/public/data/zip-ranges/516.json b/apps/web/public/data/zip-ranges/516.json similarity index 100% rename from public/data/zip-ranges/516.json rename to apps/web/public/data/zip-ranges/516.json diff --git a/public/data/zip-ranges/520.json b/apps/web/public/data/zip-ranges/520.json similarity index 100% rename from public/data/zip-ranges/520.json rename to apps/web/public/data/zip-ranges/520.json diff --git a/public/data/zip-ranges/521.json b/apps/web/public/data/zip-ranges/521.json similarity index 100% rename from public/data/zip-ranges/521.json rename to apps/web/public/data/zip-ranges/521.json diff --git a/public/data/zip-ranges/522.json b/apps/web/public/data/zip-ranges/522.json similarity index 100% rename from public/data/zip-ranges/522.json rename to apps/web/public/data/zip-ranges/522.json diff --git a/public/data/zip-ranges/523.json b/apps/web/public/data/zip-ranges/523.json similarity index 100% rename from public/data/zip-ranges/523.json rename to apps/web/public/data/zip-ranges/523.json diff --git a/public/data/zip-ranges/524.json b/apps/web/public/data/zip-ranges/524.json similarity index 100% rename from public/data/zip-ranges/524.json rename to apps/web/public/data/zip-ranges/524.json diff --git a/public/data/zip-ranges/525.json b/apps/web/public/data/zip-ranges/525.json similarity index 100% rename from public/data/zip-ranges/525.json rename to apps/web/public/data/zip-ranges/525.json diff --git a/public/data/zip-ranges/526.json b/apps/web/public/data/zip-ranges/526.json similarity index 100% rename from public/data/zip-ranges/526.json rename to apps/web/public/data/zip-ranges/526.json diff --git a/public/data/zip-ranges/527.json b/apps/web/public/data/zip-ranges/527.json similarity index 100% rename from public/data/zip-ranges/527.json rename to apps/web/public/data/zip-ranges/527.json diff --git a/public/data/zip-ranges/528.json b/apps/web/public/data/zip-ranges/528.json similarity index 100% rename from public/data/zip-ranges/528.json rename to apps/web/public/data/zip-ranges/528.json diff --git a/public/data/zip-ranges/530.json b/apps/web/public/data/zip-ranges/530.json similarity index 100% rename from public/data/zip-ranges/530.json rename to apps/web/public/data/zip-ranges/530.json diff --git a/public/data/zip-ranges/540.json b/apps/web/public/data/zip-ranges/540.json similarity index 100% rename from public/data/zip-ranges/540.json rename to apps/web/public/data/zip-ranges/540.json diff --git a/public/data/zip-ranges/541.json b/apps/web/public/data/zip-ranges/541.json similarity index 100% rename from public/data/zip-ranges/541.json rename to apps/web/public/data/zip-ranges/541.json diff --git a/public/data/zip-ranges/542.json b/apps/web/public/data/zip-ranges/542.json similarity index 100% rename from public/data/zip-ranges/542.json rename to apps/web/public/data/zip-ranges/542.json diff --git a/public/data/zip-ranges/544.json b/apps/web/public/data/zip-ranges/544.json similarity index 100% rename from public/data/zip-ranges/544.json rename to apps/web/public/data/zip-ranges/544.json diff --git a/public/data/zip-ranges/545.json b/apps/web/public/data/zip-ranges/545.json similarity index 100% rename from public/data/zip-ranges/545.json rename to apps/web/public/data/zip-ranges/545.json diff --git a/public/data/zip-ranges/546.json b/apps/web/public/data/zip-ranges/546.json similarity index 100% rename from public/data/zip-ranges/546.json rename to apps/web/public/data/zip-ranges/546.json diff --git a/public/data/zip-ranges/551.json b/apps/web/public/data/zip-ranges/551.json similarity index 100% rename from public/data/zip-ranges/551.json rename to apps/web/public/data/zip-ranges/551.json diff --git a/public/data/zip-ranges/552.json b/apps/web/public/data/zip-ranges/552.json similarity index 100% rename from public/data/zip-ranges/552.json rename to apps/web/public/data/zip-ranges/552.json diff --git a/public/data/zip-ranges/553.json b/apps/web/public/data/zip-ranges/553.json similarity index 100% rename from public/data/zip-ranges/553.json rename to apps/web/public/data/zip-ranges/553.json diff --git a/public/data/zip-ranges/555.json b/apps/web/public/data/zip-ranges/555.json similarity index 100% rename from public/data/zip-ranges/555.json rename to apps/web/public/data/zip-ranges/555.json diff --git a/public/data/zip-ranges/556.json b/apps/web/public/data/zip-ranges/556.json similarity index 100% rename from public/data/zip-ranges/556.json rename to apps/web/public/data/zip-ranges/556.json diff --git a/public/data/zip-ranges/557.json b/apps/web/public/data/zip-ranges/557.json similarity index 100% rename from public/data/zip-ranges/557.json rename to apps/web/public/data/zip-ranges/557.json diff --git a/public/data/zip-ranges/558.json b/apps/web/public/data/zip-ranges/558.json similarity index 100% rename from public/data/zip-ranges/558.json rename to apps/web/public/data/zip-ranges/558.json diff --git a/public/data/zip-ranges/600.json b/apps/web/public/data/zip-ranges/600.json similarity index 100% rename from public/data/zip-ranges/600.json rename to apps/web/public/data/zip-ranges/600.json diff --git a/public/data/zip-ranges/601.json b/apps/web/public/data/zip-ranges/601.json similarity index 100% rename from public/data/zip-ranges/601.json rename to apps/web/public/data/zip-ranges/601.json diff --git a/public/data/zip-ranges/602.json b/apps/web/public/data/zip-ranges/602.json similarity index 100% rename from public/data/zip-ranges/602.json rename to apps/web/public/data/zip-ranges/602.json diff --git a/public/data/zip-ranges/603.json b/apps/web/public/data/zip-ranges/603.json similarity index 100% rename from public/data/zip-ranges/603.json rename to apps/web/public/data/zip-ranges/603.json diff --git a/public/data/zip-ranges/604.json b/apps/web/public/data/zip-ranges/604.json similarity index 100% rename from public/data/zip-ranges/604.json rename to apps/web/public/data/zip-ranges/604.json diff --git a/public/data/zip-ranges/605.json b/apps/web/public/data/zip-ranges/605.json similarity index 100% rename from public/data/zip-ranges/605.json rename to apps/web/public/data/zip-ranges/605.json diff --git a/public/data/zip-ranges/606.json b/apps/web/public/data/zip-ranges/606.json similarity index 100% rename from public/data/zip-ranges/606.json rename to apps/web/public/data/zip-ranges/606.json diff --git a/public/data/zip-ranges/607.json b/apps/web/public/data/zip-ranges/607.json similarity index 100% rename from public/data/zip-ranges/607.json rename to apps/web/public/data/zip-ranges/607.json diff --git a/public/data/zip-ranges/608.json b/apps/web/public/data/zip-ranges/608.json similarity index 100% rename from public/data/zip-ranges/608.json rename to apps/web/public/data/zip-ranges/608.json diff --git a/public/data/zip-ranges/611.json b/apps/web/public/data/zip-ranges/611.json similarity index 100% rename from public/data/zip-ranges/611.json rename to apps/web/public/data/zip-ranges/611.json diff --git a/public/data/zip-ranges/612.json b/apps/web/public/data/zip-ranges/612.json similarity index 100% rename from public/data/zip-ranges/612.json rename to apps/web/public/data/zip-ranges/612.json diff --git a/public/data/zip-ranges/613.json b/apps/web/public/data/zip-ranges/613.json similarity index 100% rename from public/data/zip-ranges/613.json rename to apps/web/public/data/zip-ranges/613.json diff --git a/public/data/zip-ranges/614.json b/apps/web/public/data/zip-ranges/614.json similarity index 100% rename from public/data/zip-ranges/614.json rename to apps/web/public/data/zip-ranges/614.json diff --git a/public/data/zip-ranges/615.json b/apps/web/public/data/zip-ranges/615.json similarity index 100% rename from public/data/zip-ranges/615.json rename to apps/web/public/data/zip-ranges/615.json diff --git a/public/data/zip-ranges/616.json b/apps/web/public/data/zip-ranges/616.json similarity index 100% rename from public/data/zip-ranges/616.json rename to apps/web/public/data/zip-ranges/616.json diff --git a/public/data/zip-ranges/621.json b/apps/web/public/data/zip-ranges/621.json similarity index 100% rename from public/data/zip-ranges/621.json rename to apps/web/public/data/zip-ranges/621.json diff --git a/public/data/zip-ranges/622.json b/apps/web/public/data/zip-ranges/622.json similarity index 100% rename from public/data/zip-ranges/622.json rename to apps/web/public/data/zip-ranges/622.json diff --git a/public/data/zip-ranges/623.json b/apps/web/public/data/zip-ranges/623.json similarity index 100% rename from public/data/zip-ranges/623.json rename to apps/web/public/data/zip-ranges/623.json diff --git a/public/data/zip-ranges/624.json b/apps/web/public/data/zip-ranges/624.json similarity index 100% rename from public/data/zip-ranges/624.json rename to apps/web/public/data/zip-ranges/624.json diff --git a/public/data/zip-ranges/625.json b/apps/web/public/data/zip-ranges/625.json similarity index 100% rename from public/data/zip-ranges/625.json rename to apps/web/public/data/zip-ranges/625.json diff --git a/public/data/zip-ranges/630.json b/apps/web/public/data/zip-ranges/630.json similarity index 100% rename from public/data/zip-ranges/630.json rename to apps/web/public/data/zip-ranges/630.json diff --git a/public/data/zip-ranges/631.json b/apps/web/public/data/zip-ranges/631.json similarity index 100% rename from public/data/zip-ranges/631.json rename to apps/web/public/data/zip-ranges/631.json diff --git a/public/data/zip-ranges/632.json b/apps/web/public/data/zip-ranges/632.json similarity index 100% rename from public/data/zip-ranges/632.json rename to apps/web/public/data/zip-ranges/632.json diff --git a/public/data/zip-ranges/633.json b/apps/web/public/data/zip-ranges/633.json similarity index 100% rename from public/data/zip-ranges/633.json rename to apps/web/public/data/zip-ranges/633.json diff --git a/public/data/zip-ranges/634.json b/apps/web/public/data/zip-ranges/634.json similarity index 100% rename from public/data/zip-ranges/634.json rename to apps/web/public/data/zip-ranges/634.json diff --git a/public/data/zip-ranges/635.json b/apps/web/public/data/zip-ranges/635.json similarity index 100% rename from public/data/zip-ranges/635.json rename to apps/web/public/data/zip-ranges/635.json diff --git a/public/data/zip-ranges/636.json b/apps/web/public/data/zip-ranges/636.json similarity index 100% rename from public/data/zip-ranges/636.json rename to apps/web/public/data/zip-ranges/636.json diff --git a/public/data/zip-ranges/637.json b/apps/web/public/data/zip-ranges/637.json similarity index 100% rename from public/data/zip-ranges/637.json rename to apps/web/public/data/zip-ranges/637.json diff --git a/public/data/zip-ranges/638.json b/apps/web/public/data/zip-ranges/638.json similarity index 100% rename from public/data/zip-ranges/638.json rename to apps/web/public/data/zip-ranges/638.json diff --git a/public/data/zip-ranges/640.json b/apps/web/public/data/zip-ranges/640.json similarity index 100% rename from public/data/zip-ranges/640.json rename to apps/web/public/data/zip-ranges/640.json diff --git a/public/data/zip-ranges/643.json b/apps/web/public/data/zip-ranges/643.json similarity index 100% rename from public/data/zip-ranges/643.json rename to apps/web/public/data/zip-ranges/643.json diff --git a/public/data/zip-ranges/646.json b/apps/web/public/data/zip-ranges/646.json similarity index 100% rename from public/data/zip-ranges/646.json rename to apps/web/public/data/zip-ranges/646.json diff --git a/public/data/zip-ranges/647.json b/apps/web/public/data/zip-ranges/647.json similarity index 100% rename from public/data/zip-ranges/647.json rename to apps/web/public/data/zip-ranges/647.json diff --git a/public/data/zip-ranges/648.json b/apps/web/public/data/zip-ranges/648.json similarity index 100% rename from public/data/zip-ranges/648.json rename to apps/web/public/data/zip-ranges/648.json diff --git a/public/data/zip-ranges/649.json b/apps/web/public/data/zip-ranges/649.json similarity index 100% rename from public/data/zip-ranges/649.json rename to apps/web/public/data/zip-ranges/649.json diff --git a/public/data/zip-ranges/651.json b/apps/web/public/data/zip-ranges/651.json similarity index 100% rename from public/data/zip-ranges/651.json rename to apps/web/public/data/zip-ranges/651.json diff --git a/public/data/zip-ranges/652.json b/apps/web/public/data/zip-ranges/652.json similarity index 100% rename from public/data/zip-ranges/652.json rename to apps/web/public/data/zip-ranges/652.json diff --git a/public/data/zip-ranges/653.json b/apps/web/public/data/zip-ranges/653.json similarity index 100% rename from public/data/zip-ranges/653.json rename to apps/web/public/data/zip-ranges/653.json diff --git a/public/data/zip-ranges/654.json b/apps/web/public/data/zip-ranges/654.json similarity index 100% rename from public/data/zip-ranges/654.json rename to apps/web/public/data/zip-ranges/654.json diff --git a/public/data/zip-ranges/655.json b/apps/web/public/data/zip-ranges/655.json similarity index 100% rename from public/data/zip-ranges/655.json rename to apps/web/public/data/zip-ranges/655.json diff --git a/public/data/zip-ranges/700.json b/apps/web/public/data/zip-ranges/700.json similarity index 100% rename from public/data/zip-ranges/700.json rename to apps/web/public/data/zip-ranges/700.json diff --git a/public/data/zip-ranges/701.json b/apps/web/public/data/zip-ranges/701.json similarity index 100% rename from public/data/zip-ranges/701.json rename to apps/web/public/data/zip-ranges/701.json diff --git a/public/data/zip-ranges/702.json b/apps/web/public/data/zip-ranges/702.json similarity index 100% rename from public/data/zip-ranges/702.json rename to apps/web/public/data/zip-ranges/702.json diff --git a/public/data/zip-ranges/704.json b/apps/web/public/data/zip-ranges/704.json similarity index 100% rename from public/data/zip-ranges/704.json rename to apps/web/public/data/zip-ranges/704.json diff --git a/public/data/zip-ranges/708.json b/apps/web/public/data/zip-ranges/708.json similarity index 100% rename from public/data/zip-ranges/708.json rename to apps/web/public/data/zip-ranges/708.json diff --git a/public/data/zip-ranges/709.json b/apps/web/public/data/zip-ranges/709.json similarity index 100% rename from public/data/zip-ranges/709.json rename to apps/web/public/data/zip-ranges/709.json diff --git a/public/data/zip-ranges/710.json b/apps/web/public/data/zip-ranges/710.json similarity index 100% rename from public/data/zip-ranges/710.json rename to apps/web/public/data/zip-ranges/710.json diff --git a/public/data/zip-ranges/711.json b/apps/web/public/data/zip-ranges/711.json similarity index 100% rename from public/data/zip-ranges/711.json rename to apps/web/public/data/zip-ranges/711.json diff --git a/public/data/zip-ranges/712.json b/apps/web/public/data/zip-ranges/712.json similarity index 100% rename from public/data/zip-ranges/712.json rename to apps/web/public/data/zip-ranges/712.json diff --git a/public/data/zip-ranges/713.json b/apps/web/public/data/zip-ranges/713.json similarity index 100% rename from public/data/zip-ranges/713.json rename to apps/web/public/data/zip-ranges/713.json diff --git a/public/data/zip-ranges/714.json b/apps/web/public/data/zip-ranges/714.json similarity index 100% rename from public/data/zip-ranges/714.json rename to apps/web/public/data/zip-ranges/714.json diff --git a/public/data/zip-ranges/715.json b/apps/web/public/data/zip-ranges/715.json similarity index 100% rename from public/data/zip-ranges/715.json rename to apps/web/public/data/zip-ranges/715.json diff --git a/public/data/zip-ranges/716.json b/apps/web/public/data/zip-ranges/716.json similarity index 100% rename from public/data/zip-ranges/716.json rename to apps/web/public/data/zip-ranges/716.json diff --git a/public/data/zip-ranges/717.json b/apps/web/public/data/zip-ranges/717.json similarity index 100% rename from public/data/zip-ranges/717.json rename to apps/web/public/data/zip-ranges/717.json diff --git a/public/data/zip-ranges/718.json b/apps/web/public/data/zip-ranges/718.json similarity index 100% rename from public/data/zip-ranges/718.json rename to apps/web/public/data/zip-ranges/718.json diff --git a/public/data/zip-ranges/719.json b/apps/web/public/data/zip-ranges/719.json similarity index 100% rename from public/data/zip-ranges/719.json rename to apps/web/public/data/zip-ranges/719.json diff --git a/public/data/zip-ranges/720.json b/apps/web/public/data/zip-ranges/720.json similarity index 100% rename from public/data/zip-ranges/720.json rename to apps/web/public/data/zip-ranges/720.json diff --git a/public/data/zip-ranges/721.json b/apps/web/public/data/zip-ranges/721.json similarity index 100% rename from public/data/zip-ranges/721.json rename to apps/web/public/data/zip-ranges/721.json diff --git a/public/data/zip-ranges/722.json b/apps/web/public/data/zip-ranges/722.json similarity index 100% rename from public/data/zip-ranges/722.json rename to apps/web/public/data/zip-ranges/722.json diff --git a/public/data/zip-ranges/723.json b/apps/web/public/data/zip-ranges/723.json similarity index 100% rename from public/data/zip-ranges/723.json rename to apps/web/public/data/zip-ranges/723.json diff --git a/public/data/zip-ranges/724.json b/apps/web/public/data/zip-ranges/724.json similarity index 100% rename from public/data/zip-ranges/724.json rename to apps/web/public/data/zip-ranges/724.json diff --git a/public/data/zip-ranges/725.json b/apps/web/public/data/zip-ranges/725.json similarity index 100% rename from public/data/zip-ranges/725.json rename to apps/web/public/data/zip-ranges/725.json diff --git a/public/data/zip-ranges/726.json b/apps/web/public/data/zip-ranges/726.json similarity index 100% rename from public/data/zip-ranges/726.json rename to apps/web/public/data/zip-ranges/726.json diff --git a/public/data/zip-ranges/727.json b/apps/web/public/data/zip-ranges/727.json similarity index 100% rename from public/data/zip-ranges/727.json rename to apps/web/public/data/zip-ranges/727.json diff --git a/public/data/zip-ranges/730.json b/apps/web/public/data/zip-ranges/730.json similarity index 100% rename from public/data/zip-ranges/730.json rename to apps/web/public/data/zip-ranges/730.json diff --git a/public/data/zip-ranges/731.json b/apps/web/public/data/zip-ranges/731.json similarity index 100% rename from public/data/zip-ranges/731.json rename to apps/web/public/data/zip-ranges/731.json diff --git a/public/data/zip-ranges/732.json b/apps/web/public/data/zip-ranges/732.json similarity index 100% rename from public/data/zip-ranges/732.json rename to apps/web/public/data/zip-ranges/732.json diff --git a/public/data/zip-ranges/733.json b/apps/web/public/data/zip-ranges/733.json similarity index 100% rename from public/data/zip-ranges/733.json rename to apps/web/public/data/zip-ranges/733.json diff --git a/public/data/zip-ranges/734.json b/apps/web/public/data/zip-ranges/734.json similarity index 100% rename from public/data/zip-ranges/734.json rename to apps/web/public/data/zip-ranges/734.json diff --git a/public/data/zip-ranges/735.json b/apps/web/public/data/zip-ranges/735.json similarity index 100% rename from public/data/zip-ranges/735.json rename to apps/web/public/data/zip-ranges/735.json diff --git a/public/data/zip-ranges/736.json b/apps/web/public/data/zip-ranges/736.json similarity index 100% rename from public/data/zip-ranges/736.json rename to apps/web/public/data/zip-ranges/736.json diff --git a/public/data/zip-ranges/737.json b/apps/web/public/data/zip-ranges/737.json similarity index 100% rename from public/data/zip-ranges/737.json rename to apps/web/public/data/zip-ranges/737.json diff --git a/public/data/zip-ranges/741.json b/apps/web/public/data/zip-ranges/741.json similarity index 100% rename from public/data/zip-ranges/741.json rename to apps/web/public/data/zip-ranges/741.json diff --git a/public/data/zip-ranges/742.json b/apps/web/public/data/zip-ranges/742.json similarity index 100% rename from public/data/zip-ranges/742.json rename to apps/web/public/data/zip-ranges/742.json diff --git a/public/data/zip-ranges/743.json b/apps/web/public/data/zip-ranges/743.json similarity index 100% rename from public/data/zip-ranges/743.json rename to apps/web/public/data/zip-ranges/743.json diff --git a/public/data/zip-ranges/744.json b/apps/web/public/data/zip-ranges/744.json similarity index 100% rename from public/data/zip-ranges/744.json rename to apps/web/public/data/zip-ranges/744.json diff --git a/public/data/zip-ranges/745.json b/apps/web/public/data/zip-ranges/745.json similarity index 100% rename from public/data/zip-ranges/745.json rename to apps/web/public/data/zip-ranges/745.json diff --git a/public/data/zip-ranges/800.json b/apps/web/public/data/zip-ranges/800.json similarity index 100% rename from public/data/zip-ranges/800.json rename to apps/web/public/data/zip-ranges/800.json diff --git a/public/data/zip-ranges/801.json b/apps/web/public/data/zip-ranges/801.json similarity index 100% rename from public/data/zip-ranges/801.json rename to apps/web/public/data/zip-ranges/801.json diff --git a/public/data/zip-ranges/802.json b/apps/web/public/data/zip-ranges/802.json similarity index 100% rename from public/data/zip-ranges/802.json rename to apps/web/public/data/zip-ranges/802.json diff --git a/public/data/zip-ranges/803.json b/apps/web/public/data/zip-ranges/803.json similarity index 100% rename from public/data/zip-ranges/803.json rename to apps/web/public/data/zip-ranges/803.json diff --git a/public/data/zip-ranges/804.json b/apps/web/public/data/zip-ranges/804.json similarity index 100% rename from public/data/zip-ranges/804.json rename to apps/web/public/data/zip-ranges/804.json diff --git a/public/data/zip-ranges/805.json b/apps/web/public/data/zip-ranges/805.json similarity index 100% rename from public/data/zip-ranges/805.json rename to apps/web/public/data/zip-ranges/805.json diff --git a/public/data/zip-ranges/806.json b/apps/web/public/data/zip-ranges/806.json similarity index 100% rename from public/data/zip-ranges/806.json rename to apps/web/public/data/zip-ranges/806.json diff --git a/public/data/zip-ranges/807.json b/apps/web/public/data/zip-ranges/807.json similarity index 100% rename from public/data/zip-ranges/807.json rename to apps/web/public/data/zip-ranges/807.json diff --git a/public/data/zip-ranges/811.json b/apps/web/public/data/zip-ranges/811.json similarity index 100% rename from public/data/zip-ranges/811.json rename to apps/web/public/data/zip-ranges/811.json diff --git a/public/data/zip-ranges/812.json b/apps/web/public/data/zip-ranges/812.json similarity index 100% rename from public/data/zip-ranges/812.json rename to apps/web/public/data/zip-ranges/812.json diff --git a/public/data/zip-ranges/813.json b/apps/web/public/data/zip-ranges/813.json similarity index 100% rename from public/data/zip-ranges/813.json rename to apps/web/public/data/zip-ranges/813.json diff --git a/public/data/zip-ranges/814.json b/apps/web/public/data/zip-ranges/814.json similarity index 100% rename from public/data/zip-ranges/814.json rename to apps/web/public/data/zip-ranges/814.json diff --git a/public/data/zip-ranges/815.json b/apps/web/public/data/zip-ranges/815.json similarity index 100% rename from public/data/zip-ranges/815.json rename to apps/web/public/data/zip-ranges/815.json diff --git a/public/data/zip-ranges/817.json b/apps/web/public/data/zip-ranges/817.json similarity index 100% rename from public/data/zip-ranges/817.json rename to apps/web/public/data/zip-ranges/817.json diff --git a/public/data/zip-ranges/819.json b/apps/web/public/data/zip-ranges/819.json similarity index 100% rename from public/data/zip-ranges/819.json rename to apps/web/public/data/zip-ranges/819.json diff --git a/public/data/zip-ranges/820.json b/apps/web/public/data/zip-ranges/820.json similarity index 100% rename from public/data/zip-ranges/820.json rename to apps/web/public/data/zip-ranges/820.json diff --git a/public/data/zip-ranges/821.json b/apps/web/public/data/zip-ranges/821.json similarity index 100% rename from public/data/zip-ranges/821.json rename to apps/web/public/data/zip-ranges/821.json diff --git a/public/data/zip-ranges/822.json b/apps/web/public/data/zip-ranges/822.json similarity index 100% rename from public/data/zip-ranges/822.json rename to apps/web/public/data/zip-ranges/822.json diff --git a/public/data/zip-ranges/823.json b/apps/web/public/data/zip-ranges/823.json similarity index 100% rename from public/data/zip-ranges/823.json rename to apps/web/public/data/zip-ranges/823.json diff --git a/public/data/zip-ranges/824.json b/apps/web/public/data/zip-ranges/824.json similarity index 100% rename from public/data/zip-ranges/824.json rename to apps/web/public/data/zip-ranges/824.json diff --git a/public/data/zip-ranges/825.json b/apps/web/public/data/zip-ranges/825.json similarity index 100% rename from public/data/zip-ranges/825.json rename to apps/web/public/data/zip-ranges/825.json diff --git a/public/data/zip-ranges/826.json b/apps/web/public/data/zip-ranges/826.json similarity index 100% rename from public/data/zip-ranges/826.json rename to apps/web/public/data/zip-ranges/826.json diff --git a/public/data/zip-ranges/827.json b/apps/web/public/data/zip-ranges/827.json similarity index 100% rename from public/data/zip-ranges/827.json rename to apps/web/public/data/zip-ranges/827.json diff --git a/public/data/zip-ranges/828.json b/apps/web/public/data/zip-ranges/828.json similarity index 100% rename from public/data/zip-ranges/828.json rename to apps/web/public/data/zip-ranges/828.json diff --git a/public/data/zip-ranges/829.json b/apps/web/public/data/zip-ranges/829.json similarity index 100% rename from public/data/zip-ranges/829.json rename to apps/web/public/data/zip-ranges/829.json diff --git a/public/data/zip-ranges/830.json b/apps/web/public/data/zip-ranges/830.json similarity index 100% rename from public/data/zip-ranges/830.json rename to apps/web/public/data/zip-ranges/830.json diff --git a/public/data/zip-ranges/831.json b/apps/web/public/data/zip-ranges/831.json similarity index 100% rename from public/data/zip-ranges/831.json rename to apps/web/public/data/zip-ranges/831.json diff --git a/public/data/zip-ranges/832.json b/apps/web/public/data/zip-ranges/832.json similarity index 100% rename from public/data/zip-ranges/832.json rename to apps/web/public/data/zip-ranges/832.json diff --git a/public/data/zip-ranges/833.json b/apps/web/public/data/zip-ranges/833.json similarity index 100% rename from public/data/zip-ranges/833.json rename to apps/web/public/data/zip-ranges/833.json diff --git a/public/data/zip-ranges/840.json b/apps/web/public/data/zip-ranges/840.json similarity index 100% rename from public/data/zip-ranges/840.json rename to apps/web/public/data/zip-ranges/840.json diff --git a/public/data/zip-ranges/842.json b/apps/web/public/data/zip-ranges/842.json similarity index 100% rename from public/data/zip-ranges/842.json rename to apps/web/public/data/zip-ranges/842.json diff --git a/public/data/zip-ranges/843.json b/apps/web/public/data/zip-ranges/843.json similarity index 100% rename from public/data/zip-ranges/843.json rename to apps/web/public/data/zip-ranges/843.json diff --git a/public/data/zip-ranges/844.json b/apps/web/public/data/zip-ranges/844.json similarity index 100% rename from public/data/zip-ranges/844.json rename to apps/web/public/data/zip-ranges/844.json diff --git a/public/data/zip-ranges/845.json b/apps/web/public/data/zip-ranges/845.json similarity index 100% rename from public/data/zip-ranges/845.json rename to apps/web/public/data/zip-ranges/845.json diff --git a/public/data/zip-ranges/846.json b/apps/web/public/data/zip-ranges/846.json similarity index 100% rename from public/data/zip-ranges/846.json rename to apps/web/public/data/zip-ranges/846.json diff --git a/public/data/zip-ranges/847.json b/apps/web/public/data/zip-ranges/847.json similarity index 100% rename from public/data/zip-ranges/847.json rename to apps/web/public/data/zip-ranges/847.json diff --git a/public/data/zip-ranges/848.json b/apps/web/public/data/zip-ranges/848.json similarity index 100% rename from public/data/zip-ranges/848.json rename to apps/web/public/data/zip-ranges/848.json diff --git a/public/data/zip-ranges/849.json b/apps/web/public/data/zip-ranges/849.json similarity index 100% rename from public/data/zip-ranges/849.json rename to apps/web/public/data/zip-ranges/849.json diff --git a/public/data/zip-ranges/851.json b/apps/web/public/data/zip-ranges/851.json similarity index 100% rename from public/data/zip-ranges/851.json rename to apps/web/public/data/zip-ranges/851.json diff --git a/public/data/zip-ranges/852.json b/apps/web/public/data/zip-ranges/852.json similarity index 100% rename from public/data/zip-ranges/852.json rename to apps/web/public/data/zip-ranges/852.json diff --git a/public/data/zip-ranges/880.json b/apps/web/public/data/zip-ranges/880.json similarity index 100% rename from public/data/zip-ranges/880.json rename to apps/web/public/data/zip-ranges/880.json diff --git a/public/data/zip-ranges/881.json b/apps/web/public/data/zip-ranges/881.json similarity index 100% rename from public/data/zip-ranges/881.json rename to apps/web/public/data/zip-ranges/881.json diff --git a/public/data/zip-ranges/882.json b/apps/web/public/data/zip-ranges/882.json similarity index 100% rename from public/data/zip-ranges/882.json rename to apps/web/public/data/zip-ranges/882.json diff --git a/public/data/zip-ranges/883.json b/apps/web/public/data/zip-ranges/883.json similarity index 100% rename from public/data/zip-ranges/883.json rename to apps/web/public/data/zip-ranges/883.json diff --git a/public/data/zip-ranges/884.json b/apps/web/public/data/zip-ranges/884.json similarity index 100% rename from public/data/zip-ranges/884.json rename to apps/web/public/data/zip-ranges/884.json diff --git a/public/data/zip-ranges/885.json b/apps/web/public/data/zip-ranges/885.json similarity index 100% rename from public/data/zip-ranges/885.json rename to apps/web/public/data/zip-ranges/885.json diff --git a/public/data/zip-ranges/890.json b/apps/web/public/data/zip-ranges/890.json similarity index 100% rename from public/data/zip-ranges/890.json rename to apps/web/public/data/zip-ranges/890.json diff --git a/public/data/zip-ranges/891.json b/apps/web/public/data/zip-ranges/891.json similarity index 100% rename from public/data/zip-ranges/891.json rename to apps/web/public/data/zip-ranges/891.json diff --git a/public/data/zip-ranges/892.json b/apps/web/public/data/zip-ranges/892.json similarity index 100% rename from public/data/zip-ranges/892.json rename to apps/web/public/data/zip-ranges/892.json diff --git a/public/data/zip-ranges/893.json b/apps/web/public/data/zip-ranges/893.json similarity index 100% rename from public/data/zip-ranges/893.json rename to apps/web/public/data/zip-ranges/893.json diff --git a/public/data/zip-ranges/894.json b/apps/web/public/data/zip-ranges/894.json similarity index 100% rename from public/data/zip-ranges/894.json rename to apps/web/public/data/zip-ranges/894.json diff --git a/public/data/zip-ranges/896.json b/apps/web/public/data/zip-ranges/896.json similarity index 100% rename from public/data/zip-ranges/896.json rename to apps/web/public/data/zip-ranges/896.json diff --git a/public/data/zip-ranges/900.json b/apps/web/public/data/zip-ranges/900.json similarity index 100% rename from public/data/zip-ranges/900.json rename to apps/web/public/data/zip-ranges/900.json diff --git a/public/data/zip-ranges/901.json b/apps/web/public/data/zip-ranges/901.json similarity index 100% rename from public/data/zip-ranges/901.json rename to apps/web/public/data/zip-ranges/901.json diff --git a/public/data/zip-ranges/902.json b/apps/web/public/data/zip-ranges/902.json similarity index 100% rename from public/data/zip-ranges/902.json rename to apps/web/public/data/zip-ranges/902.json diff --git a/public/data/zip-ranges/903.json b/apps/web/public/data/zip-ranges/903.json similarity index 100% rename from public/data/zip-ranges/903.json rename to apps/web/public/data/zip-ranges/903.json diff --git a/public/data/zip-ranges/904.json b/apps/web/public/data/zip-ranges/904.json similarity index 100% rename from public/data/zip-ranges/904.json rename to apps/web/public/data/zip-ranges/904.json diff --git a/public/data/zip-ranges/905.json b/apps/web/public/data/zip-ranges/905.json similarity index 100% rename from public/data/zip-ranges/905.json rename to apps/web/public/data/zip-ranges/905.json diff --git a/public/data/zip-ranges/906.json b/apps/web/public/data/zip-ranges/906.json similarity index 100% rename from public/data/zip-ranges/906.json rename to apps/web/public/data/zip-ranges/906.json diff --git a/public/data/zip-ranges/907.json b/apps/web/public/data/zip-ranges/907.json similarity index 100% rename from public/data/zip-ranges/907.json rename to apps/web/public/data/zip-ranges/907.json diff --git a/public/data/zip-ranges/908.json b/apps/web/public/data/zip-ranges/908.json similarity index 100% rename from public/data/zip-ranges/908.json rename to apps/web/public/data/zip-ranges/908.json diff --git a/public/data/zip-ranges/909.json b/apps/web/public/data/zip-ranges/909.json similarity index 100% rename from public/data/zip-ranges/909.json rename to apps/web/public/data/zip-ranges/909.json diff --git a/public/data/zip-ranges/911.json b/apps/web/public/data/zip-ranges/911.json similarity index 100% rename from public/data/zip-ranges/911.json rename to apps/web/public/data/zip-ranges/911.json diff --git a/public/data/zip-ranges/912.json b/apps/web/public/data/zip-ranges/912.json similarity index 100% rename from public/data/zip-ranges/912.json rename to apps/web/public/data/zip-ranges/912.json diff --git a/public/data/zip-ranges/913.json b/apps/web/public/data/zip-ranges/913.json similarity index 100% rename from public/data/zip-ranges/913.json rename to apps/web/public/data/zip-ranges/913.json diff --git a/public/data/zip-ranges/920.json b/apps/web/public/data/zip-ranges/920.json similarity index 100% rename from public/data/zip-ranges/920.json rename to apps/web/public/data/zip-ranges/920.json diff --git a/public/data/zip-ranges/921.json b/apps/web/public/data/zip-ranges/921.json similarity index 100% rename from public/data/zip-ranges/921.json rename to apps/web/public/data/zip-ranges/921.json diff --git a/public/data/zip-ranges/922.json b/apps/web/public/data/zip-ranges/922.json similarity index 100% rename from public/data/zip-ranges/922.json rename to apps/web/public/data/zip-ranges/922.json diff --git a/public/data/zip-ranges/923.json b/apps/web/public/data/zip-ranges/923.json similarity index 100% rename from public/data/zip-ranges/923.json rename to apps/web/public/data/zip-ranges/923.json diff --git a/public/data/zip-ranges/924.json b/apps/web/public/data/zip-ranges/924.json similarity index 100% rename from public/data/zip-ranges/924.json rename to apps/web/public/data/zip-ranges/924.json diff --git a/public/data/zip-ranges/925.json b/apps/web/public/data/zip-ranges/925.json similarity index 100% rename from public/data/zip-ranges/925.json rename to apps/web/public/data/zip-ranges/925.json diff --git a/public/data/zip-ranges/926.json b/apps/web/public/data/zip-ranges/926.json similarity index 100% rename from public/data/zip-ranges/926.json rename to apps/web/public/data/zip-ranges/926.json diff --git a/public/data/zip-ranges/927.json b/apps/web/public/data/zip-ranges/927.json similarity index 100% rename from public/data/zip-ranges/927.json rename to apps/web/public/data/zip-ranges/927.json diff --git a/public/data/zip-ranges/928.json b/apps/web/public/data/zip-ranges/928.json similarity index 100% rename from public/data/zip-ranges/928.json rename to apps/web/public/data/zip-ranges/928.json diff --git a/public/data/zip-ranges/929.json b/apps/web/public/data/zip-ranges/929.json similarity index 100% rename from public/data/zip-ranges/929.json rename to apps/web/public/data/zip-ranges/929.json diff --git a/public/data/zip-ranges/931.json b/apps/web/public/data/zip-ranges/931.json similarity index 100% rename from public/data/zip-ranges/931.json rename to apps/web/public/data/zip-ranges/931.json diff --git a/public/data/zip-ranges/932.json b/apps/web/public/data/zip-ranges/932.json similarity index 100% rename from public/data/zip-ranges/932.json rename to apps/web/public/data/zip-ranges/932.json diff --git a/public/data/zip-ranges/940.json b/apps/web/public/data/zip-ranges/940.json similarity index 100% rename from public/data/zip-ranges/940.json rename to apps/web/public/data/zip-ranges/940.json diff --git a/public/data/zip-ranges/941.json b/apps/web/public/data/zip-ranges/941.json similarity index 100% rename from public/data/zip-ranges/941.json rename to apps/web/public/data/zip-ranges/941.json diff --git a/public/data/zip-ranges/942.json b/apps/web/public/data/zip-ranges/942.json similarity index 100% rename from public/data/zip-ranges/942.json rename to apps/web/public/data/zip-ranges/942.json diff --git a/public/data/zip-ranges/943.json b/apps/web/public/data/zip-ranges/943.json similarity index 100% rename from public/data/zip-ranges/943.json rename to apps/web/public/data/zip-ranges/943.json diff --git a/public/data/zip-ranges/944.json b/apps/web/public/data/zip-ranges/944.json similarity index 100% rename from public/data/zip-ranges/944.json rename to apps/web/public/data/zip-ranges/944.json diff --git a/public/data/zip-ranges/945.json b/apps/web/public/data/zip-ranges/945.json similarity index 100% rename from public/data/zip-ranges/945.json rename to apps/web/public/data/zip-ranges/945.json diff --git a/public/data/zip-ranges/946.json b/apps/web/public/data/zip-ranges/946.json similarity index 100% rename from public/data/zip-ranges/946.json rename to apps/web/public/data/zip-ranges/946.json diff --git a/public/data/zip-ranges/947.json b/apps/web/public/data/zip-ranges/947.json similarity index 100% rename from public/data/zip-ranges/947.json rename to apps/web/public/data/zip-ranges/947.json diff --git a/public/data/zip-ranges/950.json b/apps/web/public/data/zip-ranges/950.json similarity index 100% rename from public/data/zip-ranges/950.json rename to apps/web/public/data/zip-ranges/950.json diff --git a/public/data/zip-ranges/951.json b/apps/web/public/data/zip-ranges/951.json similarity index 100% rename from public/data/zip-ranges/951.json rename to apps/web/public/data/zip-ranges/951.json diff --git a/public/data/zip-ranges/952.json b/apps/web/public/data/zip-ranges/952.json similarity index 100% rename from public/data/zip-ranges/952.json rename to apps/web/public/data/zip-ranges/952.json diff --git a/public/data/zip-ranges/953.json b/apps/web/public/data/zip-ranges/953.json similarity index 100% rename from public/data/zip-ranges/953.json rename to apps/web/public/data/zip-ranges/953.json diff --git a/public/data/zip-ranges/954.json b/apps/web/public/data/zip-ranges/954.json similarity index 100% rename from public/data/zip-ranges/954.json rename to apps/web/public/data/zip-ranges/954.json diff --git a/public/data/zip-ranges/955.json b/apps/web/public/data/zip-ranges/955.json similarity index 100% rename from public/data/zip-ranges/955.json rename to apps/web/public/data/zip-ranges/955.json diff --git a/public/data/zip-ranges/956.json b/apps/web/public/data/zip-ranges/956.json similarity index 100% rename from public/data/zip-ranges/956.json rename to apps/web/public/data/zip-ranges/956.json diff --git a/public/data/zip-ranges/957.json b/apps/web/public/data/zip-ranges/957.json similarity index 100% rename from public/data/zip-ranges/957.json rename to apps/web/public/data/zip-ranges/957.json diff --git a/public/data/zip-ranges/958.json b/apps/web/public/data/zip-ranges/958.json similarity index 100% rename from public/data/zip-ranges/958.json rename to apps/web/public/data/zip-ranges/958.json diff --git a/public/data/zip-ranges/959.json b/apps/web/public/data/zip-ranges/959.json similarity index 100% rename from public/data/zip-ranges/959.json rename to apps/web/public/data/zip-ranges/959.json diff --git a/public/data/zip-ranges/961.json b/apps/web/public/data/zip-ranges/961.json similarity index 100% rename from public/data/zip-ranges/961.json rename to apps/web/public/data/zip-ranges/961.json diff --git a/public/data/zip-ranges/962.json b/apps/web/public/data/zip-ranges/962.json similarity index 100% rename from public/data/zip-ranges/962.json rename to apps/web/public/data/zip-ranges/962.json diff --git a/public/data/zip-ranges/963.json b/apps/web/public/data/zip-ranges/963.json similarity index 100% rename from public/data/zip-ranges/963.json rename to apps/web/public/data/zip-ranges/963.json diff --git a/public/data/zip-ranges/964.json b/apps/web/public/data/zip-ranges/964.json similarity index 100% rename from public/data/zip-ranges/964.json rename to apps/web/public/data/zip-ranges/964.json diff --git a/public/data/zip-ranges/965.json b/apps/web/public/data/zip-ranges/965.json similarity index 100% rename from public/data/zip-ranges/965.json rename to apps/web/public/data/zip-ranges/965.json diff --git a/public/data/zip-ranges/966.json b/apps/web/public/data/zip-ranges/966.json similarity index 100% rename from public/data/zip-ranges/966.json rename to apps/web/public/data/zip-ranges/966.json diff --git a/public/data/zip-ranges/970.json b/apps/web/public/data/zip-ranges/970.json similarity index 100% rename from public/data/zip-ranges/970.json rename to apps/web/public/data/zip-ranges/970.json diff --git a/public/data/zip-ranges/971.json b/apps/web/public/data/zip-ranges/971.json similarity index 100% rename from public/data/zip-ranges/971.json rename to apps/web/public/data/zip-ranges/971.json diff --git a/public/data/zip-ranges/972.json b/apps/web/public/data/zip-ranges/972.json similarity index 100% rename from public/data/zip-ranges/972.json rename to apps/web/public/data/zip-ranges/972.json diff --git a/public/data/zip-ranges/973.json b/apps/web/public/data/zip-ranges/973.json similarity index 100% rename from public/data/zip-ranges/973.json rename to apps/web/public/data/zip-ranges/973.json diff --git a/public/data/zip-ranges/974.json b/apps/web/public/data/zip-ranges/974.json similarity index 100% rename from public/data/zip-ranges/974.json rename to apps/web/public/data/zip-ranges/974.json diff --git a/public/data/zip-ranges/975.json b/apps/web/public/data/zip-ranges/975.json similarity index 100% rename from public/data/zip-ranges/975.json rename to apps/web/public/data/zip-ranges/975.json diff --git a/public/data/zip-ranges/976.json b/apps/web/public/data/zip-ranges/976.json similarity index 100% rename from public/data/zip-ranges/976.json rename to apps/web/public/data/zip-ranges/976.json diff --git a/public/data/zip-ranges/977.json b/apps/web/public/data/zip-ranges/977.json similarity index 100% rename from public/data/zip-ranges/977.json rename to apps/web/public/data/zip-ranges/977.json diff --git a/public/data/zip-ranges/978.json b/apps/web/public/data/zip-ranges/978.json similarity index 100% rename from public/data/zip-ranges/978.json rename to apps/web/public/data/zip-ranges/978.json diff --git a/public/data/zip-ranges/979.json b/apps/web/public/data/zip-ranges/979.json similarity index 100% rename from public/data/zip-ranges/979.json rename to apps/web/public/data/zip-ranges/979.json diff --git a/public/data/zip-ranges/981.json b/apps/web/public/data/zip-ranges/981.json similarity index 100% rename from public/data/zip-ranges/981.json rename to apps/web/public/data/zip-ranges/981.json diff --git a/public/data/zip-ranges/982.json b/apps/web/public/data/zip-ranges/982.json similarity index 100% rename from public/data/zip-ranges/982.json rename to apps/web/public/data/zip-ranges/982.json diff --git a/public/data/zip-ranges/983.json b/apps/web/public/data/zip-ranges/983.json similarity index 100% rename from public/data/zip-ranges/983.json rename to apps/web/public/data/zip-ranges/983.json diff --git a/scripts/etl.ts b/apps/web/scripts/etl.ts similarity index 100% rename from scripts/etl.ts rename to apps/web/scripts/etl.ts diff --git a/scripts/parse-address-data.ts b/apps/web/scripts/parse-address-data.ts similarity index 100% rename from scripts/parse-address-data.ts rename to apps/web/scripts/parse-address-data.ts diff --git a/scripts/parse-zip-ranges.ts b/apps/web/scripts/parse-zip-ranges.ts similarity index 100% rename from scripts/parse-zip-ranges.ts rename to apps/web/scripts/parse-zip-ranges.ts diff --git a/scripts/process-map-styles.ts b/apps/web/scripts/process-map-styles.ts similarity index 100% rename from scripts/process-map-styles.ts rename to apps/web/scripts/process-map-styles.ts diff --git a/src/app/globals.css b/apps/web/src/app/globals.css similarity index 100% rename from src/app/globals.css rename to apps/web/src/app/globals.css diff --git a/src/app/icon.svg b/apps/web/src/app/icon.svg similarity index 100% rename from src/app/icon.svg rename to apps/web/src/app/icon.svg diff --git a/src/app/layout.tsx b/apps/web/src/app/layout.tsx similarity index 100% rename from src/app/layout.tsx rename to apps/web/src/app/layout.tsx diff --git a/src/app/manifest.ts b/apps/web/src/app/manifest.ts similarity index 100% rename from src/app/manifest.ts rename to apps/web/src/app/manifest.ts diff --git a/src/app/opengraph-image.png b/apps/web/src/app/opengraph-image.png similarity index 100% rename from src/app/opengraph-image.png rename to apps/web/src/app/opengraph-image.png diff --git a/src/app/page.tsx b/apps/web/src/app/page.tsx similarity index 100% rename from src/app/page.tsx rename to apps/web/src/app/page.tsx diff --git a/src/app/robots.ts b/apps/web/src/app/robots.ts similarity index 100% rename from src/app/robots.ts rename to apps/web/src/app/robots.ts diff --git a/src/app/sitemap.ts b/apps/web/src/app/sitemap.ts similarity index 95% rename from src/app/sitemap.ts rename to apps/web/src/app/sitemap.ts index e63910e..238d946 100644 --- a/src/app/sitemap.ts +++ b/apps/web/src/app/sitemap.ts @@ -1,6 +1,6 @@ import type { MetadataRoute } from "next"; import { toSlug } from "@/lib/slug"; -import type { City } from "@/lib/types"; +import type { City } from "@zipkit/core"; import baseData from "../../public/data/base.json"; export default function sitemap(): MetadataRoute.Sitemap { diff --git a/src/app/tw/[city]/[district]/page.tsx b/apps/web/src/app/tw/[city]/[district]/page.tsx similarity index 99% rename from src/app/tw/[city]/[district]/page.tsx rename to apps/web/src/app/tw/[city]/[district]/page.tsx index b2d2105..3b36c0b 100644 --- a/src/app/tw/[city]/[district]/page.tsx +++ b/apps/web/src/app/tw/[city]/[district]/page.tsx @@ -4,7 +4,7 @@ import type { Metadata } from "next"; import { readFile } from "node:fs/promises"; import { join } from "node:path"; import { toSlug } from "@/lib/slug"; -import type { City, District, Road, ZipRange } from "@/lib/types"; +import type { City, District, Road, ZipRange } from "@zipkit/core"; import baseData from "../../../../../public/data/base.json"; const SITE_URL = process.env.NEXT_PUBLIC_SITE_URL ?? "http://localhost:3000"; diff --git a/src/components/address-detail-inputs.tsx b/apps/web/src/components/address-detail-inputs.tsx similarity index 96% rename from src/components/address-detail-inputs.tsx rename to apps/web/src/components/address-detail-inputs.tsx index bffe6ba..a8ccc34 100644 --- a/src/components/address-detail-inputs.tsx +++ b/apps/web/src/components/address-detail-inputs.tsx @@ -1,6 +1,6 @@ "use client"; -import type { AddressDetail } from "@/lib/types"; +import type { AddressDetail } from "@zipkit/core"; import { Input } from "@/components/custom/input"; interface AddressDetailInputsProps { diff --git a/src/components/address-form.tsx b/apps/web/src/components/address-form.tsx similarity index 98% rename from src/components/address-form.tsx rename to apps/web/src/components/address-form.tsx index 79ebe61..ee87602 100644 --- a/src/components/address-form.tsx +++ b/apps/web/src/components/address-form.tsx @@ -2,7 +2,7 @@ import Link from "next/link"; import { ArrowUpRight } from "lucide-react"; -import type { City } from "@/lib/types"; +import type { City } from "@zipkit/core"; import type { useAddressState } from "@/hooks/use-address-state"; import { CitySelect } from "@/components/city-select"; import { DistrictSelect } from "@/components/district-select"; diff --git a/src/components/address-page.tsx b/apps/web/src/components/address-page.tsx similarity index 99% rename from src/components/address-page.tsx rename to apps/web/src/components/address-page.tsx index 19a7526..9afe5a9 100644 --- a/src/components/address-page.tsx +++ b/apps/web/src/components/address-page.tsx @@ -7,7 +7,7 @@ import { memo, type ComponentType, } from "react"; -import type { City, District } from "@/lib/types"; +import type { City, District } from "@zipkit/core"; import { useAddressState } from "@/hooks/use-address-state"; import { toSlug } from "@/lib/slug"; import { AddressForm } from "@/components/address-form"; diff --git a/src/components/city-select.tsx b/apps/web/src/components/city-select.tsx similarity index 96% rename from src/components/city-select.tsx rename to apps/web/src/components/city-select.tsx index 3b493fa..8701aa4 100644 --- a/src/components/city-select.tsx +++ b/apps/web/src/components/city-select.tsx @@ -1,6 +1,6 @@ "use client"; -import type { City } from "@/lib/types"; +import type { City } from "@zipkit/core"; import { Select, SelectContent, diff --git a/src/components/custom/input.tsx b/apps/web/src/components/custom/input.tsx similarity index 100% rename from src/components/custom/input.tsx rename to apps/web/src/components/custom/input.tsx diff --git a/src/components/custom/map.tsx b/apps/web/src/components/custom/map.tsx similarity index 100% rename from src/components/custom/map.tsx rename to apps/web/src/components/custom/map.tsx diff --git a/src/components/custom/select.tsx b/apps/web/src/components/custom/select.tsx similarity index 100% rename from src/components/custom/select.tsx rename to apps/web/src/components/custom/select.tsx diff --git a/src/components/district-select.tsx b/apps/web/src/components/district-select.tsx similarity index 96% rename from src/components/district-select.tsx rename to apps/web/src/components/district-select.tsx index 7f045c2..d612e61 100644 --- a/src/components/district-select.tsx +++ b/apps/web/src/components/district-select.tsx @@ -1,6 +1,6 @@ "use client"; -import type { District } from "@/lib/types"; +import type { District } from "@zipkit/core"; import { Select, SelectContent, diff --git a/src/components/icons.tsx b/apps/web/src/components/icons.tsx similarity index 100% rename from src/components/icons.tsx rename to apps/web/src/components/icons.tsx diff --git a/src/components/mode-toggle.tsx b/apps/web/src/components/mode-toggle.tsx similarity index 100% rename from src/components/mode-toggle.tsx rename to apps/web/src/components/mode-toggle.tsx diff --git a/src/components/result-card.tsx b/apps/web/src/components/result-card.tsx similarity index 100% rename from src/components/result-card.tsx rename to apps/web/src/components/result-card.tsx diff --git a/src/components/road-combobox.tsx b/apps/web/src/components/road-combobox.tsx similarity index 98% rename from src/components/road-combobox.tsx rename to apps/web/src/components/road-combobox.tsx index 98bccab..a043498 100644 --- a/src/components/road-combobox.tsx +++ b/apps/web/src/components/road-combobox.tsx @@ -1,7 +1,7 @@ "use client"; import { useCallback, useRef, useState } from "react"; -import type { Road } from "@/lib/types"; +import type { Road } from "@zipkit/core"; import { Combobox, ComboboxContent, diff --git a/src/components/taiwan-map.tsx b/apps/web/src/components/taiwan-map.tsx similarity index 99% rename from src/components/taiwan-map.tsx rename to apps/web/src/components/taiwan-map.tsx index 4c0c3b3..0f6b016 100644 --- a/src/components/taiwan-map.tsx +++ b/apps/web/src/components/taiwan-map.tsx @@ -4,7 +4,7 @@ import { useEffect, useRef, useState } from "react"; import type { FeatureCollection } from "geojson"; import type { Topology } from "topojson-specification"; import type { GeoJSONSource } from "maplibre-gl"; -import type { City, District } from "@/lib/types"; +import type { City, District } from "@zipkit/core"; import { Map, useMap, MapControls } from "@/components/custom/map"; import { loadCountiesGeoJSON, diff --git a/src/components/theme-provider.tsx b/apps/web/src/components/theme-provider.tsx similarity index 100% rename from src/components/theme-provider.tsx rename to apps/web/src/components/theme-provider.tsx diff --git a/src/components/ui/button.tsx b/apps/web/src/components/ui/button.tsx similarity index 100% rename from src/components/ui/button.tsx rename to apps/web/src/components/ui/button.tsx diff --git a/src/components/ui/card.tsx b/apps/web/src/components/ui/card.tsx similarity index 100% rename from src/components/ui/card.tsx rename to apps/web/src/components/ui/card.tsx diff --git a/src/components/ui/combobox.tsx b/apps/web/src/components/ui/combobox.tsx similarity index 100% rename from src/components/ui/combobox.tsx rename to apps/web/src/components/ui/combobox.tsx diff --git a/src/components/ui/command.tsx b/apps/web/src/components/ui/command.tsx similarity index 100% rename from src/components/ui/command.tsx rename to apps/web/src/components/ui/command.tsx diff --git a/src/components/ui/dialog.tsx b/apps/web/src/components/ui/dialog.tsx similarity index 100% rename from src/components/ui/dialog.tsx rename to apps/web/src/components/ui/dialog.tsx diff --git a/src/components/ui/input-group.tsx b/apps/web/src/components/ui/input-group.tsx similarity index 100% rename from src/components/ui/input-group.tsx rename to apps/web/src/components/ui/input-group.tsx diff --git a/src/components/ui/input.tsx b/apps/web/src/components/ui/input.tsx similarity index 100% rename from src/components/ui/input.tsx rename to apps/web/src/components/ui/input.tsx diff --git a/src/components/ui/map.tsx b/apps/web/src/components/ui/map.tsx similarity index 100% rename from src/components/ui/map.tsx rename to apps/web/src/components/ui/map.tsx diff --git a/src/components/ui/popover.tsx b/apps/web/src/components/ui/popover.tsx similarity index 100% rename from src/components/ui/popover.tsx rename to apps/web/src/components/ui/popover.tsx diff --git a/src/components/ui/select.tsx b/apps/web/src/components/ui/select.tsx similarity index 100% rename from src/components/ui/select.tsx rename to apps/web/src/components/ui/select.tsx diff --git a/src/components/ui/sonner.tsx b/apps/web/src/components/ui/sonner.tsx similarity index 100% rename from src/components/ui/sonner.tsx rename to apps/web/src/components/ui/sonner.tsx diff --git a/src/components/ui/textarea.tsx b/apps/web/src/components/ui/textarea.tsx similarity index 100% rename from src/components/ui/textarea.tsx rename to apps/web/src/components/ui/textarea.tsx diff --git a/src/hooks/use-address-state.ts b/apps/web/src/hooks/use-address-state.ts similarity index 96% rename from src/hooks/use-address-state.ts rename to apps/web/src/hooks/use-address-state.ts index 516e2c9..5f77d12 100644 --- a/src/hooks/use-address-state.ts +++ b/apps/web/src/hooks/use-address-state.ts @@ -7,13 +7,10 @@ import type { Road, AddressDetail, ZipRange, -} from "@/lib/types"; +} from "@zipkit/core"; import { loadRoads, loadZipRanges } from "@/lib/data-loader"; -import { - formatEnglishAddress, - parseNumber, -} from "@/lib/format-english-address"; -import { lookupZip6 } from "@/lib/lookup-zipcode"; +import { formatEnglishAddress, parseNumber } from "@zipkit/core"; +import { lookupZip6 } from "@zipkit/core"; const EMPTY_DETAIL: AddressDetail = { lane: "", diff --git a/src/lib/data-loader.ts b/apps/web/src/lib/data-loader.ts similarity index 94% rename from src/lib/data-loader.ts rename to apps/web/src/lib/data-loader.ts index fe1ba0c..0f48295 100644 --- a/src/lib/data-loader.ts +++ b/apps/web/src/lib/data-loader.ts @@ -1,4 +1,4 @@ -import type { Road, ZipRange } from "./types"; +import type { Road, ZipRange } from "@zipkit/core"; const roadsCache = new Map(); const zipRangesCache = new Map(); diff --git a/src/lib/map-data-loader.ts b/apps/web/src/lib/map-data-loader.ts similarity index 100% rename from src/lib/map-data-loader.ts rename to apps/web/src/lib/map-data-loader.ts diff --git a/src/lib/map-proxy.ts b/apps/web/src/lib/map-proxy.ts similarity index 100% rename from src/lib/map-proxy.ts rename to apps/web/src/lib/map-proxy.ts diff --git a/src/lib/map-utils.ts b/apps/web/src/lib/map-utils.ts similarity index 100% rename from src/lib/map-utils.ts rename to apps/web/src/lib/map-utils.ts diff --git a/src/lib/slug.ts b/apps/web/src/lib/slug.ts similarity index 100% rename from src/lib/slug.ts rename to apps/web/src/lib/slug.ts diff --git a/src/lib/utils.ts b/apps/web/src/lib/utils.ts similarity index 100% rename from src/lib/utils.ts rename to apps/web/src/lib/utils.ts diff --git a/tsconfig.json b/apps/web/tsconfig.json similarity index 100% rename from tsconfig.json rename to apps/web/tsconfig.json diff --git a/package.json b/package.json index f55a37d..0dbdee6 100644 --- a/package.json +++ b/package.json @@ -4,54 +4,18 @@ "private": true, "packageManager": "pnpm@10.33.0", "scripts": { - "dev": "next dev", - "build": "next build", - "start": "next start", - "lint": "eslint", - "typecheck": "tsc --noEmit", + "dev": "pnpm --filter web dev", + "build": "pnpm --filter web build", + "start": "pnpm --filter web start", + "lint": "pnpm --filter web lint", + "typecheck": "pnpm --recursive typecheck", + "etl": "pnpm --filter web etl", "format": "prettier --write .", "format:check": "prettier --check .", - "check": "tsc --noEmit && eslint && prettier --check .", - "etl": "tsx scripts/etl.ts", - "shadcn:diff": "for f in src/components/ui/*.tsx; do name=$(basename \"$f\" .tsx); echo \"=== $name ===\"; pnpm shadcn add \"$name\" --diff 2>&1 || pnpm shadcn add \"@mapcn/$name\" --diff 2>&1; echo; done", - "shadcn:update": "for f in src/components/ui/*.tsx; do name=$(basename \"$f\" .tsx); pnpm shadcn add \"$name\" --overwrite 2>&1 || pnpm shadcn add \"@mapcn/$name\" --overwrite 2>&1; done" - }, - "dependencies": { - "@base-ui/react": "^1.5.0", - "@vercel/analytics": "^2.0.1", - "@vercel/speed-insights": "^2.0.0", - "class-variance-authority": "^0.7.1", - "clsx": "^2.1.1", - "cmdk": "^1.1.1", - "lucide-react": "^1.18.0", - "maplibre-gl": "^5.24.0", - "next": "16.2.9", - "next-themes": "^0.4.6", - "react": "19.2.7", - "react-dom": "19.2.7", - "shadcn": "^4.11.0", - "sonner": "^2.0.7", - "tailwind-merge": "^3.6.0", - "topojson-client": "^3.1.0", - "tw-animate-css": "^1.4.0" + "check": "pnpm --recursive typecheck && pnpm --filter web lint && prettier --check ." }, "devDependencies": { - "@tailwindcss/postcss": "^4.3.1", - "@types/geojson": "^7946.0.16", - "@types/node": "^25.9.3", - "@types/react": "^19.2.17", - "@types/react-dom": "^19.2.3", - "@types/topojson-client": "^3.1.5", - "@types/topojson-specification": "^1.0.5", - "eslint": "^9.39.4", - "eslint-config-next": "16.2.9", - "eslint-config-prettier": "^10.1.8", "prettier": "^3.8.4", - "prettier-plugin-tailwindcss": "^0.8.0", - "tailwindcss": "^4.3.1", - "taiwan-atlas": "^2021.9.20", - "tsx": "^4.22.4", - "typescript": "^6.0.3", - "typescript-eslint": "^8.61.1" + "prettier-plugin-tailwindcss": "^0.8.0" } } diff --git a/packages/core/package.json b/packages/core/package.json new file mode 100644 index 0000000..8c2c089 --- /dev/null +++ b/packages/core/package.json @@ -0,0 +1,20 @@ +{ + "name": "@zipkit/core", + "version": "0.0.0", + "private": true, + "type": "module", + "exports": { + ".": { + "types": "./src/index.ts", + "default": "./src/index.ts" + } + }, + "main": "./src/index.ts", + "types": "./src/index.ts", + "scripts": { + "typecheck": "tsc --noEmit" + }, + "devDependencies": { + "typescript": "^6.0.3" + } +} diff --git a/src/lib/format-english-address.ts b/packages/core/src/format-english-address.ts similarity index 100% rename from src/lib/format-english-address.ts rename to packages/core/src/format-english-address.ts diff --git a/packages/core/src/index.ts b/packages/core/src/index.ts new file mode 100644 index 0000000..d844dfe --- /dev/null +++ b/packages/core/src/index.ts @@ -0,0 +1,3 @@ +export * from "./types"; +export * from "./lookup-zipcode"; +export * from "./format-english-address"; diff --git a/src/lib/lookup-zipcode.ts b/packages/core/src/lookup-zipcode.ts similarity index 100% rename from src/lib/lookup-zipcode.ts rename to packages/core/src/lookup-zipcode.ts diff --git a/src/lib/types.ts b/packages/core/src/types.ts similarity index 100% rename from src/lib/types.ts rename to packages/core/src/types.ts diff --git a/packages/core/tsconfig.json b/packages/core/tsconfig.json new file mode 100644 index 0000000..88cc2d2 --- /dev/null +++ b/packages/core/tsconfig.json @@ -0,0 +1,15 @@ +{ + "compilerOptions": { + "target": "ES2022", + "lib": ["ES2023"], + "module": "ESNext", + "moduleResolution": "bundler", + "strict": true, + "noEmit": true, + "esModuleInterop": true, + "isolatedModules": true, + "skipLibCheck": true + }, + "include": ["src/**/*.ts"], + "exclude": ["node_modules"] +} diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index b90520c..3eafff0 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -7,6 +7,15 @@ settings: importers: .: + devDependencies: + prettier: + specifier: ^3.8.4 + version: 3.8.4 + prettier-plugin-tailwindcss: + specifier: ^0.8.0 + version: 0.8.0(prettier@3.8.4) + + apps/web: dependencies: '@base-ui/react': specifier: ^1.5.0 @@ -17,6 +26,9 @@ importers: '@vercel/speed-insights': specifier: ^2.0.0 version: 2.0.0(next@16.2.9(@babel/core@7.29.7)(react-dom@19.2.7(react@19.2.7))(react@19.2.7))(react@19.2.7) + '@zipkit/core': + specifier: workspace:* + version: link:../../packages/core class-variance-authority: specifier: ^0.7.1 version: 0.7.1 @@ -90,12 +102,6 @@ importers: eslint-config-prettier: specifier: ^10.1.8 version: 10.1.8(eslint@9.39.4(jiti@2.7.0)) - prettier: - specifier: ^3.8.4 - version: 3.8.4 - prettier-plugin-tailwindcss: - specifier: ^0.8.0 - version: 0.8.0(prettier@3.8.4) tailwindcss: specifier: ^4.3.1 version: 4.3.1 @@ -112,6 +118,12 @@ importers: specifier: ^8.61.1 version: 8.61.1(eslint@9.39.4(jiti@2.7.0))(typescript@6.0.3) + packages/core: + devDependencies: + typescript: + specifier: ^6.0.3 + version: 6.0.3 + packages: '@alloc/quick-lru@5.2.0': @@ -2504,10 +2516,6 @@ packages: js-tokens@4.0.0: resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} - js-yaml@4.1.1: - resolution: {integrity: sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA==} - hasBin: true - js-yaml@4.2.0: resolution: {integrity: sha512-ePWsvanv0DWuDRsW8dnt+R4jQ31SCRCQ7hhNcPXZPsoBZiemuZNYGf7adZdqX2D86j6rvKp3RpCxVTSb8WQlOw==} hasBin: true @@ -3972,7 +3980,7 @@ snapshots: globals: 14.0.0 ignore: 5.3.2 import-fresh: 3.3.1 - js-yaml: 4.1.1 + js-yaml: 4.2.0 minimatch: 3.1.5 strip-json-comments: 3.1.1 transitivePeerDependencies: @@ -5982,10 +5990,6 @@ snapshots: js-tokens@4.0.0: {} - js-yaml@4.1.1: - dependencies: - argparse: 2.0.1 - js-yaml@4.2.0: dependencies: argparse: 2.0.1 diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml index e5d2b9e..e051f2f 100644 --- a/pnpm-workspace.yaml +++ b/pnpm-workspace.yaml @@ -1,3 +1,7 @@ +packages: + - apps/* + - packages/* + ignoredBuiltDependencies: - esbuild - sharp From 476547478a8e932d45d298aafaa8d6232e8c6bfa Mon Sep 17 00:00:00 2001 From: ronload <91997734+ronload@users.noreply.github.com> Date: Wed, 24 Jun 2026 12:34:24 +0800 Subject: [PATCH 2/2] docs: update README for monorepo layout Update file paths (apps/web, packages/core), rewrite the project structure tree for the workspace, and note the monorepo in the tech stack. --- README.md | 44 +++++++++++++++++++++++++++----------------- 1 file changed, 27 insertions(+), 17 deletions(-) diff --git a/README.md b/README.md index f31d41e..a1b963a 100644 --- a/README.md +++ b/README.md @@ -34,7 +34,7 @@ - [shadcn/ui](https://ui.shadcn.com/) 4 / [mapcn](https://mapcn.vercel.app/) - [MapLibre GL JS](https://maplibre.org/) -- 台灣行政區地圖 - [TypeScript](https://www.typescriptlang.org/) 6 -- [pnpm](https://pnpm.io/) 套件管理 +- [pnpm](https://pnpm.io/) workspace monorepo(`apps/web` 應用 + `packages/core` 核心邏輯) ## 快速開始 @@ -64,13 +64,13 @@ pnpm dev ### 資料流程(ETL) -原始郵政資料放置於 `scripts/raw/`(不納入版本控制)。ETL 腳本(`scripts/etl.ts`)處理兩份來源: +原始郵政資料放置於 `apps/web/scripts/raw/`(不納入版本控制)。ETL 腳本(`apps/web/scripts/etl.ts`)處理兩份來源: ``` -CityCountyData.json + AllData.json --> public/data/base.json(縣市/鄉鎮市區索引) - public/data/roads/{zip3}.json(各區路街清單) +CityCountyData.json + AllData.json --> apps/web/public/data/base.json(縣市/鄉鎮市區索引) + apps/web/public/data/roads/{zip3}.json(各區路街清單) -rall1.txt (CSV) --> public/data/zip-ranges/{zip3}.json(郵遞區號範圍規則) +rall1.txt (CSV) --> apps/web/public/data/zip-ranges/{zip3}.json(郵遞區號範圍規則) ``` - `base.json` 在建置時靜態匯入,包含所有縣市與鄉鎮市區 @@ -78,25 +78,35 @@ rall1.txt (CSV) --> public/data/zip-ranges/{zip3}.json( ### 郵遞區號比對 -`src/lib/lookup-zipcode.ts` 以特異性評分(specificity scoring)比對地址與郵遞區號範圍規則。條件越多(巷段、弄段、門牌範圍、單雙號、樓層)的規則分數越高,優先採用。支援門牌之號(如「5之1」)與樓層限制等進階比對。 +`packages/core/src/lookup-zipcode.ts`(`@zipkit/core` 套件)以特異性評分(specificity scoring)比對地址與郵遞區號範圍規則。條件越多(巷段、弄段、門牌範圍、單雙號、樓層)的規則分數越高,優先採用。支援門牌之號(如「5之1」)與樓層限制等進階比對。 ### 狀態管理 -`src/hooks/use-address-state.ts` 以 `useReducer` 管理聯動表單狀態。選擇上層欄位時自動重設下層欄位。路街與郵遞區號資料透過 `src/lib/data-loader.ts` 按需載入並快取於記憶體中。 +`apps/web/src/hooks/use-address-state.ts` 以 `useReducer` 管理聯動表單狀態。選擇上層欄位時自動重設下層欄位。路街與郵遞區號資料透過 `apps/web/src/lib/data-loader.ts` 按需載入並快取於記憶體中。 ## 專案結構 +本專案為 pnpm workspace monorepo。 + ``` -src/ - app/ # Next.js App Router 頁面 - components/ # UI 元件 - hooks/ # React hooks(地址狀態管理) - lib/ # 工具函式(郵遞區號比對、資料載入) -scripts/ - etl.ts # ETL 資料轉換腳本 - raw/ # 原始郵政資料(不納入版本控制) -public/ - data/ # 預先產生的靜態 JSON +apps/ + web/ # Next.js 應用(前端 + SSG 區頁) + src/ + app/ # App Router 頁面 + components/ # UI 元件 + hooks/ # React hooks(地址狀態管理) + lib/ # web 專屬工具(資料載入、地圖、slug) + scripts/ + etl.ts # ETL 資料轉換腳本 + raw/ # 原始郵政資料(不納入版本控制) + public/ + data/ # 預先產生的靜態 JSON +packages/ + core/ # @zipkit/core:地址核心邏輯(無框架依賴) + src/ + lookup-zipcode.ts # 3+3 郵遞區號特異性評分比對 + format-english-address.ts # UPU 格式英譯 + types.ts # 共用領域型別 ``` ## 資料來源