From 0905005543ae1aaf32cd3b71307588120d8263c1 Mon Sep 17 00:00:00 2001 From: fede Date: Sat, 14 Mar 2026 14:53:03 -0300 Subject: [PATCH] primera iteracion del front --- front/bun.lock | 159 ++++++++++++ front/index.html | 19 ++ front/jsconfig.json | 33 +++ front/package.json | 16 ++ front/public/favicon.svg | 1 + front/public/icons.svg | 24 ++ front/src/App.svelte | 82 ++++++ front/src/app.css | 300 ++++++++++++++++++++++ front/src/assets/hero.png | Bin 0 -> 44919 bytes front/src/assets/hooks/getUrl.js | 7 + front/src/assets/lib/AcortadorForm.svelte | 30 +++ front/src/assets/svelte.svg | 1 + front/src/assets/vite.svg | 1 + front/src/main.js | 9 + front/svelte.config.js | 2 + front/vite.config.js | 7 + main.go | 4 + makefile | 2 + routes/root.go | 52 ++++ 19 files changed, 749 insertions(+) create mode 100644 front/bun.lock create mode 100644 front/index.html create mode 100644 front/jsconfig.json create mode 100644 front/package.json create mode 100644 front/public/favicon.svg create mode 100644 front/public/icons.svg create mode 100644 front/src/App.svelte create mode 100644 front/src/app.css create mode 100644 front/src/assets/hero.png create mode 100644 front/src/assets/hooks/getUrl.js create mode 100644 front/src/assets/lib/AcortadorForm.svelte create mode 100644 front/src/assets/svelte.svg create mode 100644 front/src/assets/vite.svg create mode 100644 front/src/main.js create mode 100644 front/svelte.config.js create mode 100644 front/vite.config.js create mode 100644 makefile create mode 100644 routes/root.go diff --git a/front/bun.lock b/front/bun.lock new file mode 100644 index 0000000..16d3074 --- /dev/null +++ b/front/bun.lock @@ -0,0 +1,159 @@ +{ + "lockfileVersion": 1, + "configVersion": 1, + "workspaces": { + "": { + "name": "front", + "devDependencies": { + "@sveltejs/vite-plugin-svelte": "^7.0.0", + "svelte": "^5.53.7", + "vite": "^8.0.0", + }, + }, + }, + "packages": { + "@emnapi/core": ["@emnapi/core@1.9.0", "", { "dependencies": { "@emnapi/wasi-threads": "1.2.0", "tslib": "^2.4.0" } }, "sha512-0DQ98G9ZQZOxfUcQn1waV2yS8aWdZ6kJMbYCJB3oUBecjWYO1fqJ+a1DRfPF3O5JEkwqwP1A9QEN/9mYm2Yd0w=="], + + "@emnapi/runtime": ["@emnapi/runtime@1.9.0", "", { "dependencies": { "tslib": "^2.4.0" } }, "sha512-QN75eB0IH2ywSpRpNddCRfQIhmJYBCJ1x5Lb3IscKAL8bMnVAKnRg8dCoXbHzVLLH7P38N2Z3mtulB7W0J0FKw=="], + + "@emnapi/wasi-threads": ["@emnapi/wasi-threads@1.2.0", "", { "dependencies": { "tslib": "^2.4.0" } }, "sha512-N10dEJNSsUx41Z6pZsXU8FjPjpBEplgH24sfkmITrBED1/U2Esum9F3lfLrMjKHHjmi557zQn7kR9R+XWXu5Rg=="], + + "@jridgewell/gen-mapping": ["@jridgewell/gen-mapping@0.3.13", "", { "dependencies": { "@jridgewell/sourcemap-codec": "^1.5.0", "@jridgewell/trace-mapping": "^0.3.24" } }, "sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA=="], + + "@jridgewell/remapping": ["@jridgewell/remapping@2.3.5", "", { "dependencies": { "@jridgewell/gen-mapping": "^0.3.5", "@jridgewell/trace-mapping": "^0.3.24" } }, "sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ=="], + + "@jridgewell/resolve-uri": ["@jridgewell/resolve-uri@3.1.2", "", {}, "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw=="], + + "@jridgewell/sourcemap-codec": ["@jridgewell/sourcemap-codec@1.5.5", "", {}, "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og=="], + + "@jridgewell/trace-mapping": ["@jridgewell/trace-mapping@0.3.31", "", { "dependencies": { "@jridgewell/resolve-uri": "^3.1.0", "@jridgewell/sourcemap-codec": "^1.4.14" } }, "sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw=="], + + "@napi-rs/wasm-runtime": ["@napi-rs/wasm-runtime@1.1.1", "", { "dependencies": { "@emnapi/core": "^1.7.1", "@emnapi/runtime": "^1.7.1", "@tybys/wasm-util": "^0.10.1" } }, "sha512-p64ah1M1ld8xjWv3qbvFwHiFVWrq1yFvV4f7w+mzaqiR4IlSgkqhcRdHwsGgomwzBH51sRY4NEowLxnaBjcW/A=="], + + "@oxc-project/runtime": ["@oxc-project/runtime@0.115.0", "", {}, "sha512-Rg8Wlt5dCbXhQnsXPrkOjL1DTSvXLgb2R/KYfnf1/K+R0k6UMLEmbQXPM+kwrWqSmWA2t0B1EtHy2/3zikQpvQ=="], + + "@oxc-project/types": ["@oxc-project/types@0.115.0", "", {}, "sha512-4n91DKnebUS4yjUHl2g3/b2T+IUdCfmoZGhmwsovZCDaJSs+QkVAM+0AqqTxHSsHfeiMuueT75cZaZcT/m0pSw=="], + + "@rolldown/binding-android-arm64": ["@rolldown/binding-android-arm64@1.0.0-rc.9", "", { "os": "android", "cpu": "arm64" }, "sha512-lcJL0bN5hpgJfSIz/8PIf02irmyL43P+j1pTCfbD1DbLkmGRuFIA4DD3B3ZOvGqG0XiVvRznbKtN0COQVaKUTg=="], + + "@rolldown/binding-darwin-arm64": ["@rolldown/binding-darwin-arm64@1.0.0-rc.9", "", { "os": "darwin", "cpu": "arm64" }, "sha512-J7Zk3kLYFsLtuH6U+F4pS2sYVzac0qkjcO5QxHS7OS7yZu2LRs+IXo+uvJ/mvpyUljDJ3LROZPoQfgBIpCMhdQ=="], + + "@rolldown/binding-darwin-x64": ["@rolldown/binding-darwin-x64@1.0.0-rc.9", "", { "os": "darwin", "cpu": "x64" }, "sha512-iwtmmghy8nhfRGeNAIltcNXzD0QMNaaA5U/NyZc1Ia4bxrzFByNMDoppoC+hl7cDiUq5/1CnFthpT9n+UtfFyg=="], + + "@rolldown/binding-freebsd-x64": ["@rolldown/binding-freebsd-x64@1.0.0-rc.9", "", { "os": "freebsd", "cpu": "x64" }, "sha512-DLFYI78SCiZr5VvdEplsVC2Vx53lnA4/Ga5C65iyldMVaErr86aiqCoNBLl92PXPfDtUYjUh+xFFor40ueNs4Q=="], + + "@rolldown/binding-linux-arm-gnueabihf": ["@rolldown/binding-linux-arm-gnueabihf@1.0.0-rc.9", "", { "os": "linux", "cpu": "arm" }, "sha512-CsjTmTwd0Hri6iTw/DRMK7kOZ7FwAkrO4h8YWKoX/kcj833e4coqo2wzIFywtch/8Eb5enQ/lwLM7w6JX1W5RQ=="], + + "@rolldown/binding-linux-arm64-gnu": ["@rolldown/binding-linux-arm64-gnu@1.0.0-rc.9", "", { "os": "linux", "cpu": "arm64" }, "sha512-2x9O2JbSPxpxMDhP9Z74mahAStibTlrBMW0520+epJH5sac7/LwZW5Bmg/E6CXuEF53JJFW509uP+lSedaUNxg=="], + + "@rolldown/binding-linux-arm64-musl": ["@rolldown/binding-linux-arm64-musl@1.0.0-rc.9", "", { "os": "linux", "cpu": "arm64" }, "sha512-JA1QRW31ogheAIRhIg9tjMfsYbglXXYGNPLdPEYrwFxdbkQCAzvpSCSHCDWNl4hTtrol8WeboCSEpjdZK8qrCg=="], + + "@rolldown/binding-linux-ppc64-gnu": ["@rolldown/binding-linux-ppc64-gnu@1.0.0-rc.9", "", { "os": "linux", "cpu": "ppc64" }, "sha512-aOKU9dJheda8Kj8Y3w9gnt9QFOO+qKPAl8SWd7JPHP+Cu0EuDAE5wokQubLzIDQWg2myXq2XhTpOVS07qqvT+w=="], + + "@rolldown/binding-linux-s390x-gnu": ["@rolldown/binding-linux-s390x-gnu@1.0.0-rc.9", "", { "os": "linux", "cpu": "s390x" }, "sha512-OalO94fqj7IWRn3VdXWty75jC5dk4C197AWEuMhIpvVv2lw9fiPhud0+bW2ctCxb3YoBZor71QHbY+9/WToadA=="], + + "@rolldown/binding-linux-x64-gnu": ["@rolldown/binding-linux-x64-gnu@1.0.0-rc.9", "", { "os": "linux", "cpu": "x64" }, "sha512-cVEl1vZtBsBZna3YMjGXNvnYYrOJ7RzuWvZU0ffvJUexWkukMaDuGhUXn0rjnV0ptzGVkvc+vW9Yqy6h8YX4pg=="], + + "@rolldown/binding-linux-x64-musl": ["@rolldown/binding-linux-x64-musl@1.0.0-rc.9", "", { "os": "linux", "cpu": "x64" }, "sha512-UzYnKCIIc4heAKgI4PZ3dfBGUZefGCJ1TPDuLHoCzgrMYPb5Rv6TLFuYtyM4rWyHM7hymNdsg5ik2C+UD9VDbA=="], + + "@rolldown/binding-openharmony-arm64": ["@rolldown/binding-openharmony-arm64@1.0.0-rc.9", "", { "os": "none", "cpu": "arm64" }, "sha512-+6zoiF+RRyf5cdlFQP7nm58mq7+/2PFaY2DNQeD4B87N36JzfF/l9mdBkkmTvSYcYPE8tMh/o3cRlsx1ldLfog=="], + + "@rolldown/binding-wasm32-wasi": ["@rolldown/binding-wasm32-wasi@1.0.0-rc.9", "", { "dependencies": { "@napi-rs/wasm-runtime": "^1.1.1" }, "cpu": "none" }, "sha512-rgFN6sA/dyebil3YTlL2evvi/M+ivhfnyxec7AccTpRPccno/rPoNlqybEZQBkcbZu8Hy+eqNJCqfBR8P7Pg8g=="], + + "@rolldown/binding-win32-arm64-msvc": ["@rolldown/binding-win32-arm64-msvc@1.0.0-rc.9", "", { "os": "win32", "cpu": "arm64" }, "sha512-lHVNUG/8nlF1IQk1C0Ci574qKYyty2goMiPlRqkC5R+3LkXDkL5Dhx8ytbxq35m+pkHVIvIxviD+TWLdfeuadA=="], + + "@rolldown/binding-win32-x64-msvc": ["@rolldown/binding-win32-x64-msvc@1.0.0-rc.9", "", { "os": "win32", "cpu": "x64" }, "sha512-G0oA4+w1iY5AGi5HcDTxWsoxF509hrFIPB2rduV5aDqS9FtDg1CAfa7V34qImbjfhIcA8C+RekocJZA96EarwQ=="], + + "@rolldown/pluginutils": ["@rolldown/pluginutils@1.0.0-rc.9", "", {}, "sha512-w6oiRWgEBl04QkFZgmW+jnU1EC9b57Oihi2ot3HNWIQRqgHp5PnYDia5iZ5FF7rpa4EQdiqMDXjlqKGXBhsoXw=="], + + "@sveltejs/acorn-typescript": ["@sveltejs/acorn-typescript@1.0.9", "", { "peerDependencies": { "acorn": "^8.9.0" } }, "sha512-lVJX6qEgs/4DOcRTpo56tmKzVPtoWAaVbL4hfO7t7NVwl9AAXzQR6cihesW1BmNMPl+bK6dreu2sOKBP2Q9CIA=="], + + "@sveltejs/vite-plugin-svelte": ["@sveltejs/vite-plugin-svelte@7.0.0", "", { "dependencies": { "deepmerge": "^4.3.1", "magic-string": "^0.30.21", "obug": "^2.1.0", "vitefu": "^1.1.2" }, "peerDependencies": { "svelte": "^5.46.4", "vite": "^8.0.0-beta.7 || ^8.0.0" } }, "sha512-ILXmxC7HAsnkK2eslgPetrqqW1BKSL7LktsFgqzNj83MaivMGZzluWq32m25j2mDOjmSKX7GGWahePhuEs7P/g=="], + + "@tybys/wasm-util": ["@tybys/wasm-util@0.10.1", "", { "dependencies": { "tslib": "^2.4.0" } }, "sha512-9tTaPJLSiejZKx+Bmog4uSubteqTvFrVrURwkmHixBo0G4seD0zUxp98E1DzUBJxLQ3NPwXrGKDiVjwx/DpPsg=="], + + "@types/estree": ["@types/estree@1.0.8", "", {}, "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w=="], + + "@types/trusted-types": ["@types/trusted-types@2.0.7", "", {}, "sha512-ScaPdn1dQczgbl0QFTeTOmVHFULt394XJgOQNoyVhZ6r2vLnMLJfBPd53SB52T/3G36VI1/g2MZaX0cwDuXsfw=="], + + "@typescript-eslint/types": ["@typescript-eslint/types@8.57.0", "", {}, "sha512-dTLI8PEXhjUC7B9Kre+u0XznO696BhXcTlOn0/6kf1fHaQW8+VjJAVHJ3eTI14ZapTxdkOmc80HblPQLaEeJdg=="], + + "acorn": ["acorn@8.16.0", "", { "bin": { "acorn": "bin/acorn" } }, "sha512-UVJyE9MttOsBQIDKw1skb9nAwQuR5wuGD3+82K6JgJlm/Y+KI92oNsMNGZCYdDsVtRHSak0pcV5Dno5+4jh9sw=="], + + "aria-query": ["aria-query@5.3.1", "", {}, "sha512-Z/ZeOgVl7bcSYZ/u/rh0fOpvEpq//LZmdbkXyc7syVzjPAhfOa9ebsdTSjEBDU4vs5nC98Kfduj1uFo0qyET3g=="], + + "axobject-query": ["axobject-query@4.1.0", "", {}, "sha512-qIj0G9wZbMGNLjLmg1PT6v2mE9AH2zlnADJD/2tC6E00hgmhUOfEB6greHPAfLRSufHqROIUTkw6E+M3lH0PTQ=="], + + "clsx": ["clsx@2.1.1", "", {}, "sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA=="], + + "deepmerge": ["deepmerge@4.3.1", "", {}, "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A=="], + + "detect-libc": ["detect-libc@2.1.2", "", {}, "sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ=="], + + "devalue": ["devalue@5.6.4", "", {}, "sha512-Gp6rDldRsFh/7XuouDbxMH3Mx8GMCcgzIb1pDTvNyn8pZGQ22u+Wa+lGV9dQCltFQ7uVw0MhRyb8XDskNFOReA=="], + + "esm-env": ["esm-env@1.2.2", "", {}, "sha512-Epxrv+Nr/CaL4ZcFGPJIYLWFom+YeV1DqMLHJoEd9SYRxNbaFruBwfEX/kkHUJf55j2+TUbmDcmuilbP1TmXHA=="], + + "esrap": ["esrap@2.2.4", "", { "dependencies": { "@jridgewell/sourcemap-codec": "^1.4.15", "@typescript-eslint/types": "^8.2.0" } }, "sha512-suICpxAmZ9A8bzJjEl/+rLJiDKC0X4gYWUxT6URAWBLvlXmtbZd5ySMu/N2ZGEtMCAmflUDPSehrP9BQcsGcSg=="], + + "fdir": ["fdir@6.5.0", "", { "peerDependencies": { "picomatch": "^3 || ^4" }, "optionalPeers": ["picomatch"] }, "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg=="], + + "fsevents": ["fsevents@2.3.3", "", { "os": "darwin" }, "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw=="], + + "is-reference": ["is-reference@3.0.3", "", { "dependencies": { "@types/estree": "^1.0.6" } }, "sha512-ixkJoqQvAP88E6wLydLGGqCJsrFUnqoH6HnaczB8XmDH1oaWU+xxdptvikTgaEhtZ53Ky6YXiBuUI2WXLMCwjw=="], + + "lightningcss": ["lightningcss@1.32.0", "", { "dependencies": { "detect-libc": "^2.0.3" }, "optionalDependencies": { "lightningcss-android-arm64": "1.32.0", "lightningcss-darwin-arm64": "1.32.0", "lightningcss-darwin-x64": "1.32.0", "lightningcss-freebsd-x64": "1.32.0", "lightningcss-linux-arm-gnueabihf": "1.32.0", "lightningcss-linux-arm64-gnu": "1.32.0", "lightningcss-linux-arm64-musl": "1.32.0", "lightningcss-linux-x64-gnu": "1.32.0", "lightningcss-linux-x64-musl": "1.32.0", "lightningcss-win32-arm64-msvc": "1.32.0", "lightningcss-win32-x64-msvc": "1.32.0" } }, "sha512-NXYBzinNrblfraPGyrbPoD19C1h9lfI/1mzgWYvXUTe414Gz/X1FD2XBZSZM7rRTrMA8JL3OtAaGifrIKhQ5yQ=="], + + "lightningcss-android-arm64": ["lightningcss-android-arm64@1.32.0", "", { "os": "android", "cpu": "arm64" }, "sha512-YK7/ClTt4kAK0vo6w3X+Pnm0D2cf2vPHbhOXdoNti1Ga0al1P4TBZhwjATvjNwLEBCnKvjJc2jQgHXH0NEwlAg=="], + + "lightningcss-darwin-arm64": ["lightningcss-darwin-arm64@1.32.0", "", { "os": "darwin", "cpu": "arm64" }, "sha512-RzeG9Ju5bag2Bv1/lwlVJvBE3q6TtXskdZLLCyfg5pt+HLz9BqlICO7LZM7VHNTTn/5PRhHFBSjk5lc4cmscPQ=="], + + "lightningcss-darwin-x64": ["lightningcss-darwin-x64@1.32.0", "", { "os": "darwin", "cpu": "x64" }, "sha512-U+QsBp2m/s2wqpUYT/6wnlagdZbtZdndSmut/NJqlCcMLTWp5muCrID+K5UJ6jqD2BFshejCYXniPDbNh73V8w=="], + + "lightningcss-freebsd-x64": ["lightningcss-freebsd-x64@1.32.0", "", { "os": "freebsd", "cpu": "x64" }, "sha512-JCTigedEksZk3tHTTthnMdVfGf61Fky8Ji2E4YjUTEQX14xiy/lTzXnu1vwiZe3bYe0q+SpsSH/CTeDXK6WHig=="], + + "lightningcss-linux-arm-gnueabihf": ["lightningcss-linux-arm-gnueabihf@1.32.0", "", { "os": "linux", "cpu": "arm" }, "sha512-x6rnnpRa2GL0zQOkt6rts3YDPzduLpWvwAF6EMhXFVZXD4tPrBkEFqzGowzCsIWsPjqSK+tyNEODUBXeeVHSkw=="], + + "lightningcss-linux-arm64-gnu": ["lightningcss-linux-arm64-gnu@1.32.0", "", { "os": "linux", "cpu": "arm64" }, "sha512-0nnMyoyOLRJXfbMOilaSRcLH3Jw5z9HDNGfT/gwCPgaDjnx0i8w7vBzFLFR1f6CMLKF8gVbebmkUN3fa/kQJpQ=="], + + "lightningcss-linux-arm64-musl": ["lightningcss-linux-arm64-musl@1.32.0", "", { "os": "linux", "cpu": "arm64" }, "sha512-UpQkoenr4UJEzgVIYpI80lDFvRmPVg6oqboNHfoH4CQIfNA+HOrZ7Mo7KZP02dC6LjghPQJeBsvXhJod/wnIBg=="], + + "lightningcss-linux-x64-gnu": ["lightningcss-linux-x64-gnu@1.32.0", "", { "os": "linux", "cpu": "x64" }, "sha512-V7Qr52IhZmdKPVr+Vtw8o+WLsQJYCTd8loIfpDaMRWGUZfBOYEJeyJIkqGIDMZPwPx24pUMfwSxxI8phr/MbOA=="], + + "lightningcss-linux-x64-musl": ["lightningcss-linux-x64-musl@1.32.0", "", { "os": "linux", "cpu": "x64" }, "sha512-bYcLp+Vb0awsiXg/80uCRezCYHNg1/l3mt0gzHnWV9XP1W5sKa5/TCdGWaR/zBM2PeF/HbsQv/j2URNOiVuxWg=="], + + "lightningcss-win32-arm64-msvc": ["lightningcss-win32-arm64-msvc@1.32.0", "", { "os": "win32", "cpu": "arm64" }, "sha512-8SbC8BR40pS6baCM8sbtYDSwEVQd4JlFTOlaD3gWGHfThTcABnNDBda6eTZeqbofalIJhFx0qKzgHJmcPTnGdw=="], + + "lightningcss-win32-x64-msvc": ["lightningcss-win32-x64-msvc@1.32.0", "", { "os": "win32", "cpu": "x64" }, "sha512-Amq9B/SoZYdDi1kFrojnoqPLxYhQ4Wo5XiL8EVJrVsB8ARoC1PWW6VGtT0WKCemjy8aC+louJnjS7U18x3b06Q=="], + + "locate-character": ["locate-character@3.0.0", "", {}, "sha512-SW13ws7BjaeJ6p7Q6CO2nchbYEc3X3J6WrmTTDto7yMPqVSZTUyY5Tjbid+Ab8gLnATtygYtiDIJGQRRn2ZOiA=="], + + "magic-string": ["magic-string@0.30.21", "", { "dependencies": { "@jridgewell/sourcemap-codec": "^1.5.5" } }, "sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ=="], + + "nanoid": ["nanoid@3.3.11", "", { "bin": { "nanoid": "bin/nanoid.cjs" } }, "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w=="], + + "obug": ["obug@2.1.1", "", {}, "sha512-uTqF9MuPraAQ+IsnPf366RG4cP9RtUi7MLO1N3KEc+wb0a6yKpeL0lmk2IB1jY5KHPAlTc6T/JRdC/YqxHNwkQ=="], + + "picocolors": ["picocolors@1.1.1", "", {}, "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA=="], + + "picomatch": ["picomatch@4.0.3", "", {}, "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q=="], + + "postcss": ["postcss@8.5.8", "", { "dependencies": { "nanoid": "^3.3.11", "picocolors": "^1.1.1", "source-map-js": "^1.2.1" } }, "sha512-OW/rX8O/jXnm82Ey1k44pObPtdblfiuWnrd8X7GJ7emImCOstunGbXUpp7HdBrFQX6rJzn3sPT397Wp5aCwCHg=="], + + "rolldown": ["rolldown@1.0.0-rc.9", "", { "dependencies": { "@oxc-project/types": "=0.115.0", "@rolldown/pluginutils": "1.0.0-rc.9" }, "optionalDependencies": { "@rolldown/binding-android-arm64": "1.0.0-rc.9", "@rolldown/binding-darwin-arm64": "1.0.0-rc.9", "@rolldown/binding-darwin-x64": "1.0.0-rc.9", "@rolldown/binding-freebsd-x64": "1.0.0-rc.9", "@rolldown/binding-linux-arm-gnueabihf": "1.0.0-rc.9", "@rolldown/binding-linux-arm64-gnu": "1.0.0-rc.9", "@rolldown/binding-linux-arm64-musl": "1.0.0-rc.9", "@rolldown/binding-linux-ppc64-gnu": "1.0.0-rc.9", "@rolldown/binding-linux-s390x-gnu": "1.0.0-rc.9", "@rolldown/binding-linux-x64-gnu": "1.0.0-rc.9", "@rolldown/binding-linux-x64-musl": "1.0.0-rc.9", "@rolldown/binding-openharmony-arm64": "1.0.0-rc.9", "@rolldown/binding-wasm32-wasi": "1.0.0-rc.9", "@rolldown/binding-win32-arm64-msvc": "1.0.0-rc.9", "@rolldown/binding-win32-x64-msvc": "1.0.0-rc.9" }, "bin": { "rolldown": "bin/cli.mjs" } }, "sha512-9EbgWge7ZH+yqb4d2EnELAntgPTWbfL8ajiTW+SyhJEC4qhBbkCKbqFV4Ge4zmu5ziQuVbWxb/XwLZ+RIO7E8Q=="], + + "source-map-js": ["source-map-js@1.2.1", "", {}, "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA=="], + + "svelte": ["svelte@5.53.12", "", { "dependencies": { "@jridgewell/remapping": "^2.3.4", "@jridgewell/sourcemap-codec": "^1.5.0", "@sveltejs/acorn-typescript": "^1.0.5", "@types/estree": "^1.0.5", "@types/trusted-types": "^2.0.7", "acorn": "^8.12.1", "aria-query": "5.3.1", "axobject-query": "^4.1.0", "clsx": "^2.1.1", "devalue": "^5.6.4", "esm-env": "^1.2.1", "esrap": "^2.2.2", "is-reference": "^3.0.3", "locate-character": "^3.0.0", "magic-string": "^0.30.11", "zimmerframe": "^1.1.2" } }, "sha512-4x/uk4rQe/d7RhfvS8wemTfNjQ0bJbKvamIzRBfTe2eHHjzBZ7PZicUQrC2ryj83xxEacfA1zHKd1ephD1tAxA=="], + + "tinyglobby": ["tinyglobby@0.2.15", "", { "dependencies": { "fdir": "^6.5.0", "picomatch": "^4.0.3" } }, "sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ=="], + + "tslib": ["tslib@2.8.1", "", {}, "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w=="], + + "vite": ["vite@8.0.0", "", { "dependencies": { "@oxc-project/runtime": "0.115.0", "lightningcss": "^1.32.0", "picomatch": "^4.0.3", "postcss": "^8.5.8", "rolldown": "1.0.0-rc.9", "tinyglobby": "^0.2.15" }, "optionalDependencies": { "fsevents": "~2.3.3" }, "peerDependencies": { "@types/node": "^20.19.0 || >=22.12.0", "@vitejs/devtools": "^0.0.0-alpha.31", "esbuild": "^0.27.0", "jiti": ">=1.21.0", "less": "^4.0.0", "sass": "^1.70.0", "sass-embedded": "^1.70.0", "stylus": ">=0.54.8", "sugarss": "^5.0.0", "terser": "^5.16.0", "tsx": "^4.8.1", "yaml": "^2.4.2" }, "optionalPeers": ["@types/node", "@vitejs/devtools", "esbuild", "jiti", "less", "sass", "sass-embedded", "stylus", "sugarss", "terser", "tsx", "yaml"], "bin": { "vite": "bin/vite.js" } }, "sha512-fPGaRNj9Zytaf8LEiBhY7Z6ijnFKdzU/+mL8EFBaKr7Vw1/FWcTBAMW0wLPJAGMPX38ZPVCVgLceWiEqeoqL2Q=="], + + "vitefu": ["vitefu@1.1.2", "", { "peerDependencies": { "vite": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-beta.0" }, "optionalPeers": ["vite"] }, "sha512-zpKATdUbzbsycPFBN71nS2uzBUQiVnFoOrr2rvqv34S1lcAgMKKkjWleLGeiJlZ8lwCXvtWaRn7R3ZC16SYRuw=="], + + "zimmerframe": ["zimmerframe@1.1.4", "", {}, "sha512-B58NGBEoc8Y9MWWCQGl/gq9xBCe4IiKM0a2x7GZdQKOW5Exr8S1W24J6OgM1njK8xCRGvAJIL/MxXHf6SkmQKQ=="], + } +} diff --git a/front/index.html b/front/index.html new file mode 100644 index 0000000..a00d206 --- /dev/null +++ b/front/index.html @@ -0,0 +1,19 @@ + + + + + + + + + + front + + +
+ + + diff --git a/front/jsconfig.json b/front/jsconfig.json new file mode 100644 index 0000000..c7a0b10 --- /dev/null +++ b/front/jsconfig.json @@ -0,0 +1,33 @@ +{ + "compilerOptions": { + "moduleResolution": "bundler", + "target": "ESNext", + "module": "ESNext", + /** + * svelte-preprocess cannot figure out whether you have + * a value or a type, so tell TypeScript to enforce using + * `import type` instead of `import` for Types. + */ + "verbatimModuleSyntax": true, + "isolatedModules": true, + "resolveJsonModule": true, + /** + * To have warnings / errors of the Svelte compiler at the + * correct position, enable source maps by default. + */ + "sourceMap": true, + "esModuleInterop": true, + "types": ["vite/client"], + "skipLibCheck": true, + /** + * Typecheck JS in `.svelte` and `.js` files by default. + * Disable this if you'd like to use dynamic types. + */ + "checkJs": true + }, + /** + * Use global.d.ts instead of compilerOptions.types + * to avoid limiting type declarations. + */ + "include": ["src/**/*.d.ts", "src/**/*.js", "src/**/*.svelte"] +} diff --git a/front/package.json b/front/package.json new file mode 100644 index 0000000..fec0541 --- /dev/null +++ b/front/package.json @@ -0,0 +1,16 @@ +{ + "name": "front", + "private": true, + "version": "0.0.0", + "type": "module", + "scripts": { + "dev": "vite", + "build": "vite build", + "preview": "vite preview" + }, + "devDependencies": { + "@sveltejs/vite-plugin-svelte": "^7.0.0", + "svelte": "^5.53.7", + "vite": "^8.0.0" + } +} diff --git a/front/public/favicon.svg b/front/public/favicon.svg new file mode 100644 index 0000000..6893eb1 --- /dev/null +++ b/front/public/favicon.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/front/public/icons.svg b/front/public/icons.svg new file mode 100644 index 0000000..e952219 --- /dev/null +++ b/front/public/icons.svg @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/front/src/App.svelte b/front/src/App.svelte new file mode 100644 index 0000000..75afb04 --- /dev/null +++ b/front/src/App.svelte @@ -0,0 +1,82 @@ + + +
+
+

Acortador de Urls

+
+ +
+ +
+ +
+
+ +

Documentation

+

Your questions, answered

+ +
+
+

FOSS

+

El código se puede encontrar en mi Gitea

+ + Ver URL del Gitea + + + + +
+
+ +
+
+ + diff --git a/front/src/app.css b/front/src/app.css new file mode 100644 index 0000000..89ccc0c --- /dev/null +++ b/front/src/app.css @@ -0,0 +1,300 @@ +:root { + --text: #6b6375; + --text-h: #08060d; + --bg: #fff; + --border: #e5e4e7; + --code-bg: #f4f3ec; + --accent: #aa3bff; + --accent-bg: rgba(170, 59, 255, 0.1); + --accent-border: rgba(170, 59, 255, 0.5); + --social-bg: rgba(244, 243, 236, 0.5); + --shadow: + rgba(0, 0, 0, 0.1) 0 10px 15px -3px, rgba(0, 0, 0, 0.05) 0 4px 6px -2px; + + --sans: system-ui, "Segoe UI", Roboto, sans-serif; + --heading: system-ui, "Segoe UI", Roboto, sans-serif; + --mono: ui-monospace, Consolas, monospace; + + font: 18px/145% var(--sans); + letter-spacing: 0.18px; + color-scheme: light dark; + color: var(--text); + background: var(--bg); + font-synthesis: none; + text-rendering: optimizeLegibility; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; + + @media (max-width: 1024px) { + font-size: 16px; + } +} + +@media (prefers-color-scheme: dark) { + :root { + --text: #9ca3af; + --text-h: #f3f4f6; + --bg: #16171d; + --border: #2e303a; + --code-bg: #1f2028; + --accent: #c084fc; + --accent-bg: rgba(192, 132, 252, 0.15); + --accent-border: rgba(192, 132, 252, 0.5); + --social-bg: rgba(47, 48, 58, 0.5); + --shadow: + rgba(0, 0, 0, 0.4) 0 10px 15px -3px, + rgba(0, 0, 0, 0.25) 0 4px 6px -2px; + } + + #social .button-icon { + filter: invert(1) brightness(2); + } +} + +body { + margin: 0; +} + +h1, +h2 { + font-family: var(--heading); + font-weight: 500; + color: var(--text-h); +} + +h1 { + font-size: 56px; + letter-spacing: -1.68px; + margin: 32px 0; + @media (max-width: 1024px) { + font-size: 36px; + margin: 20px 0; + } +} +h2 { + font-size: 24px; + line-height: 118%; + letter-spacing: -0.24px; + margin: 0 0 8px; + @media (max-width: 1024px) { + font-size: 20px; + } +} +p { + margin: 0; +} + +code, +.counter { + font-family: var(--mono); + display: inline-flex; + border-radius: 4px; + color: var(--text-h); +} + +code { + font-size: 15px; + line-height: 135%; + padding: 4px 8px; + background: var(--code-bg); +} + +.counter { + font-size: 16px; + padding: 5px 10px; + border-radius: 5px; + color: var(--accent); + background: var(--accent-bg); + border: 2px solid transparent; + transition: border-color 0.3s; + margin-bottom: 24px; + + &:hover { + border-color: var(--accent-border); + } + &:focus-visible { + outline: 2px solid var(--accent); + outline-offset: 2px; + } +} + +.hero { + position: relative; + + .base, + .framework, + .vite { + inset-inline: 0; + margin: 0 auto; + } + + .base { + width: 170px; + position: relative; + z-index: 0; + } + + .framework, + .vite { + position: absolute; + } + + .framework { + z-index: 1; + top: 34px; + height: 28px; + transform: perspective(2000px) rotateZ(300deg) rotateX(44deg) + rotateY(39deg) scale(1.4); + } + + .vite { + z-index: 0; + top: 107px; + height: 26px; + width: auto; + transform: perspective(2000px) rotateZ(300deg) rotateX(40deg) + rotateY(39deg) scale(0.8); + } +} + +#app { + width: 1126px; + max-width: 100%; + margin: 0 auto; + text-align: center; + border-inline: 1px solid var(--border); + min-height: 100svh; + display: flex; + flex-direction: column; + box-sizing: border-box; +} + +#center { + display: flex; + flex-direction: column; + gap: 25px; + place-content: center; + place-items: center; + flex-grow: 1; + + @media (max-width: 1024px) { + padding: 32px 20px 24px; + gap: 18px; + } +} + +#next-steps { + display: flex; + border-top: 1px solid var(--border); + text-align: left; + + & > div { + flex: 1 1 0; + padding: 32px; + @media (max-width: 1024px) { + padding: 24px 20px; + } + } + + .icon { + margin-bottom: 16px; + width: 22px; + height: 22px; + } + + @media (max-width: 1024px) { + flex-direction: column; + text-align: center; + } +} + +#docs { + border-right: 1px solid var(--border); + + @media (max-width: 1024px) { + border-right: none; + border-bottom: 1px solid var(--border); + } +} + +#next-steps ul { + list-style: none; + padding: 0; + display: flex; + gap: 8px; + margin: 32px 0 0; + + .logo { + height: 18px; + } + + a { + color: var(--text-h); + font-size: 16px; + border-radius: 6px; + background: var(--social-bg); + display: flex; + padding: 6px 12px; + align-items: center; + gap: 8px; + text-decoration: none; + transition: box-shadow 0.3s; + + &:hover { + box-shadow: var(--shadow); + } + .button-icon { + height: 18px; + width: 18px; + } + } + + @media (max-width: 1024px) { + margin-top: 20px; + flex-wrap: wrap; + justify-content: center; + + li { + flex: 1 1 calc(50% - 8px); + } + + a { + width: 100%; + justify-content: center; + box-sizing: border-box; + } + } +} + +#spacer { + height: 88px; + border-top: 1px solid var(--border); + @media (max-width: 1024px) { + height: 48px; + } +} + +.ticks { + position: relative; + width: 100%; + + &::before, + &::after { + content: ""; + position: absolute; + top: -4.5px; + border: 5px solid transparent; + } + + &::before { + left: 0; + border-left-color: var(--border); + } + &::after { + right: 0; + border-right-color: var(--border); + } +} +.underline { + text-decoration: underline; +} diff --git a/front/src/assets/hero.png b/front/src/assets/hero.png new file mode 100644 index 0000000000000000000000000000000000000000..cc51a3d20ad4bc961b596a6adfd686685cd84bb0 GIT binary patch literal 44919 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 KelF{r5}E+d8+Ql* literal 0 HcmV?d00001 diff --git a/front/src/assets/hooks/getUrl.js b/front/src/assets/hooks/getUrl.js new file mode 100644 index 0000000..c35be04 --- /dev/null +++ b/front/src/assets/hooks/getUrl.js @@ -0,0 +1,7 @@ +import { readable } from "svelte/store"; + +export const url = readable( + typeof window !== "undefined" && window.location.hostname === "localhost" + ? "http://localhost:8080" + : "https://fedesrv.ddns.net/short", +); diff --git a/front/src/assets/lib/AcortadorForm.svelte b/front/src/assets/lib/AcortadorForm.svelte new file mode 100644 index 0000000..789d0d7 --- /dev/null +++ b/front/src/assets/lib/AcortadorForm.svelte @@ -0,0 +1,30 @@ + + +
{ + e.preventDefault(); + // console.log(e.target[0].value); + // console.log(input); + const req = { longUrl: input.value }; + try { + const res = await fetch($url + "/url", { + method: "POST", + body: JSON.stringify({ ...req }), + }); + if (res.ok) { + const data = await res.json(); + console.log(data.shortUrl); + } + } catch {} + }} +> + + +
diff --git a/front/src/assets/svelte.svg b/front/src/assets/svelte.svg new file mode 100644 index 0000000..c5e0848 --- /dev/null +++ b/front/src/assets/svelte.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/front/src/assets/vite.svg b/front/src/assets/vite.svg new file mode 100644 index 0000000..5101b67 --- /dev/null +++ b/front/src/assets/vite.svg @@ -0,0 +1 @@ +Vite diff --git a/front/src/main.js b/front/src/main.js new file mode 100644 index 0000000..458c7a8 --- /dev/null +++ b/front/src/main.js @@ -0,0 +1,9 @@ +import { mount } from 'svelte' +import './app.css' +import App from './App.svelte' + +const app = mount(App, { + target: document.getElementById('app'), +}) + +export default app diff --git a/front/svelte.config.js b/front/svelte.config.js new file mode 100644 index 0000000..0cf7db3 --- /dev/null +++ b/front/svelte.config.js @@ -0,0 +1,2 @@ +/** @type {import("@sveltejs/vite-plugin-svelte").SvelteConfig} */ +export default {} diff --git a/front/vite.config.js b/front/vite.config.js new file mode 100644 index 0000000..d32eba1 --- /dev/null +++ b/front/vite.config.js @@ -0,0 +1,7 @@ +import { defineConfig } from 'vite' +import { svelte } from '@sveltejs/vite-plugin-svelte' + +// https://vite.dev/config/ +export default defineConfig({ + plugins: [svelte()], +}) diff --git a/main.go b/main.go index eab23bd..9019a88 100644 --- a/main.go +++ b/main.go @@ -27,6 +27,10 @@ func main() { routes.Url(w, r, db) }) + http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request){ + routes.Root(w,r); + }) + port := ":8080" if envPort := os.Getenv("PORT"); envPort != "" { port = ":" + envPort diff --git a/makefile b/makefile new file mode 100644 index 0000000..687b624 --- /dev/null +++ b/makefile @@ -0,0 +1,2 @@ +run: + bunx concurrently "ENV=dev go run main.go" "cd front && bun dev" diff --git a/routes/root.go b/routes/root.go new file mode 100644 index 0000000..004e015 --- /dev/null +++ b/routes/root.go @@ -0,0 +1,52 @@ +package routes + +import ( + "io" + "net/http" + "os" +) + +func Root (w http.ResponseWriter, r *http.Request){ + + if os.Getenv("ENV") == "dev" { + // proxy reverso al server de front + proxyReq, err := http.NewRequest(r.Method, "http://localhost:5173" + r.URL.Path, r.Body) + if err != nil { + http.Error(w, "Proxy error: "+err.Error(), http.StatusInternalServerError) + return + } + + // copiar headers de request + for key, values := range r.Header { + for _, value := range values { + proxyReq.Header.Add(key, value) + } + } + + // hacer request al front + client := &http.Client{} + resp, err := client.Do(proxyReq) + if err != nil { + http.Error(w, "Proxy error: "+err.Error(), http.StatusInternalServerError) + return + } + defer resp.Body.Close() + + // copiar header de respuesta + for key, values := range resp.Header { + for _, value := range values { + w.Header().Add(key, value) + } + } + + // Copiar codigo de estado y cuerpo + w.WriteHeader(resp.StatusCode) + _, err = io.Copy(w, resp.Body) + if err != nil { + http.Error(w, "Proxy error: "+err.Error(), http.StatusInternalServerError) + return + } + } else { + http.ServeFile(w, r, "index.html") + } +}