diff --git a/backend/.env.example b/backend/.env.example new file mode 100644 index 0000000..b66a670 --- /dev/null +++ b/backend/.env.example @@ -0,0 +1,10 @@ +AIRTABLE_PAT=dummy +AIRTABLE_BASE=dummy +SESSION_SECRET=dummy +OIDC_ISSUER=dummy +OIDC_CLIENT_ID=dummy +OIDC_CLIENT_SECRET=dummy +OIDC_REDIRECT_URI=dummy +HACKATIME_CLIENT_ID=dummy +HACKATIME_CLIENT_SECRET=dummy +HACKATIME_REDIRECT_URI=dummy \ No newline at end of file diff --git a/backend/.gitignore b/backend/.gitignore index 2eea525..59fb312 100644 --- a/backend/.gitignore +++ b/backend/.gitignore @@ -1 +1,3 @@ -.env \ No newline at end of file +.env +.env.* +!.env.example \ No newline at end of file diff --git a/package-lock.json b/package-lock.json index 4307231..4bd9267 100644 --- a/package-lock.json +++ b/package-lock.json @@ -8,6 +8,7 @@ "name": "stickers", "version": "0.0.1", "dependencies": { + "bootstrap": "^5.3.8", "flubber": "^0.4.2" }, "devDependencies": { @@ -519,6 +520,17 @@ "dev": true, "license": "MIT" }, + "node_modules/@popperjs/core": { + "version": "2.11.8", + "resolved": "https://registry.npmjs.org/@popperjs/core/-/core-2.11.8.tgz", + "integrity": "sha512-P1st0aksCrn9sGZhp8GMYwBnQsbvAWsZAX44oXNNvLHGqAOcoVxmjZiohstwQ7SqKnbR47akdNi+uleWD8+g6A==", + "license": "MIT", + "peer": true, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/popperjs" + } + }, "node_modules/@rollup/rollup-android-arm-eabi": { "version": "4.53.3", "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.53.3.tgz", @@ -979,6 +991,25 @@ "node": ">= 0.4" } }, + "node_modules/bootstrap": { + "version": "5.3.8", + "resolved": "https://registry.npmjs.org/bootstrap/-/bootstrap-5.3.8.tgz", + "integrity": "sha512-HP1SZDqaLDPwsNiqRqi5NcP0SSXciX2s9E+RyqJIIqGo+vJeN5AJVM98CXmW/Wux0nQ5L7jeWUdplCEf0Ee+tg==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/twbs" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/bootstrap" + } + ], + "license": "MIT", + "peerDependencies": { + "@popperjs/core": "^2.11.8" + } + }, "node_modules/chokidar": { "version": "4.0.3", "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-4.0.3.tgz", diff --git a/package.json b/package.json index 027ad5e..9b1e717 100644 --- a/package.json +++ b/package.json @@ -21,6 +21,7 @@ "vite": "^7.2.2" }, "dependencies": { + "bootstrap": "^5.3.8", "flubber": "^0.4.2" } } diff --git a/src/lib/assets/images/back.png b/src/lib/assets/images/back.png new file mode 100644 index 0000000..97922e8 Binary files /dev/null and b/src/lib/assets/images/back.png differ diff --git a/src/lib/assets/images/background.css b/src/lib/assets/images/background.css new file mode 100644 index 0000000..3b202f7 --- /dev/null +++ b/src/lib/assets/images/background.css @@ -0,0 +1,551 @@ +.bg-image-8 { + position: absolute; + width: 604px; + height: 616px; + background: url('./backgrounds-assets/image%208.svg'); + background-size: contain; + background-repeat: no-repeat; + filter: drop-shadow(10px 10px 4px #000000); + transform: rotate(16.1deg); +} + +.bg-image-2 { + position: absolute; + width: 831px; + height: 512px; + background: url('./backgrounds-assets/image%202.svg'); + background-size: contain; + background-repeat: no-repeat; + filter: drop-shadow(10px 10px 4px #000000); +} + +.bg-image-1 { + position: absolute; + width: 492px; + height: 616px; + background: url('./backgrounds-assets/image%201.svg'); + background-size: contain; + background-repeat: no-repeat; + filter: drop-shadow(10px 10px 4px #000000); +} + +.bg-image-3 { + position: absolute; + width: 704px; + height: 377px; + background: url('./backgrounds-assets/image%203.svg'); + background-size: contain; + background-repeat: no-repeat; + filter: drop-shadow(10px 10px 4px #000000); + transform: rotate(10.07deg); +} + +.bg-image-4 { + position: absolute; + width: 500px; + height: 616px; + background: url('./backgrounds-assets/image%204.svg'); + background-size: contain; + background-repeat: no-repeat; + filter: drop-shadow(10px 10px 4px #000000); +} + +.bg-image-5 { + position: absolute; + width: 467px; + height: 596px; + background: url('./backgrounds-assets/image%205.svg'); + background-size: contain; + background-repeat: no-repeat; + filter: drop-shadow(10px 10px 4px #000000); + transform: rotate(-6.94deg); +} + +.bg-image-10 { + position: absolute; + width: 474px; + height: 528px; + background: url('./backgrounds-assets/image%2010.svg'); + background-size: contain; + background-repeat: no-repeat; + filter: drop-shadow(10px 10px 4px #000000); +} + +.bg-image-14 { + position: absolute; + width: 639px; + height: 439px; + background: url('./backgrounds-assets/image%2014.svg'); + background-size: contain; + background-repeat: no-repeat; + filter: drop-shadow(10px 10px 4px #000000); + transform: rotate(-13.19deg); +} + +.bg-image-15 { + position: absolute; + width: 788px; + height: 788px; + background: url('./backgrounds-assets/image%2015.svg'); + background-size: contain; + background-repeat: no-repeat; + filter: drop-shadow(10px 10px 4px #000000); +} + +.bg-image-16 { + position: absolute; + width: 978px; + height: 1304px; + background: url('./backgrounds-assets/image%2016.svg'); + background-size: contain; + background-repeat: no-repeat; + filter: drop-shadow(10px 10px 4px #000000); +} + +.bg-image-17 { + position: absolute; + width: 1029.07px; + height: 1455.63px; + background: url('./backgrounds-assets/image%2017.svg'); + background-size: contain; + background-repeat: no-repeat; + filter: drop-shadow(10px 10px 4px #000000); + transform: rotate(3.69deg); +} + +.bg-image-18 { + position: absolute; + width: 571.25px; + height: 856.88px; + background: url('./backgrounds-assets/image%2018.svg'); + background-size: contain; + background-repeat: no-repeat; + filter: drop-shadow(10px 10px 4px #000000); + transform: rotate(6.2deg); +} + +.bg-image-20 { + position: absolute; + width: 604px; + height: 616px; + background: url('./backgrounds-assets/image%2020.svg'); + background-size: contain; + background-repeat: no-repeat; + filter: drop-shadow(10px 10px 4px #000000); + transform: rotate(16.1deg); +} + +.bg-image-21 { + position: absolute; + width: 831px; + height: 512px; + background: url('./backgrounds-assets/image%2021.svg'); + background-size: contain; + background-repeat: no-repeat; + filter: drop-shadow(10px 10px 4px #000000); +} + +.bg-image-22 { + position: absolute; + width: 492px; + height: 616px; + background: url('./backgrounds-assets/image%2022.svg'); + background-size: contain; + background-repeat: no-repeat; + filter: drop-shadow(10px 10px 4px #000000); +} + +.bg-image-23 { + position: absolute; + width: 704px; + height: 377px; + background: url('./backgrounds-assets/image%2023.svg'); + background-size: contain; + background-repeat: no-repeat; + filter: drop-shadow(10px 10px 4px #000000); + transform: rotate(10.07deg); +} + +.bg-image-29 { + position: absolute; + width: 474px; + height: 528px; + background: url('./backgrounds-assets/image%2029.svg'); + background-size: contain; + background-repeat: no-repeat; + filter: drop-shadow(10px 10px 4px #000000); +} + +.bg-image-31 { + position: absolute; + width: 639px; + height: 439px; + background: url('./backgrounds-assets/image%2031.svg'); + background-size: contain; + background-repeat: no-repeat; + filter: drop-shadow(10px 10px 4px #000000); + transform: rotate(-13.19deg); +} + +.bg-image-33 { + position: absolute; + width: 978px; + height: 1304px; + background: url('./backgrounds-assets/image%2033.svg'); + background-size: contain; + background-repeat: no-repeat; + filter: drop-shadow(10px 10px 4px #000000); +} + +.bg-image-34 { + position: absolute; + width: 1029.07px; + height: 1455.63px; + background: url('./backgrounds-assets/image%2034.svg'); + background-size: contain; + background-repeat: no-repeat; + filter: drop-shadow(10px 10px 4px #000000); + transform: rotate(3.69deg); +} + +.bg-image-35 { + position: absolute; + width: 571.25px; + height: 856.88px; + background: url('./backgrounds-assets/image%2035.svg'); + background-size: contain; + background-repeat: no-repeat; + filter: drop-shadow(10px 10px 4px #000000); + transform: rotate(6.2deg); +} + +.bg-image-37 { + position: absolute; + width: 604px; + height: 616px; + background: url('./backgrounds-assets/image%2037.svg'); + background-size: contain; + background-repeat: no-repeat; + filter: drop-shadow(10px 10px 4px #000000); + transform: rotate(16.1deg); +} + +.bg-image-38 { + position: absolute; + width: 831px; + height: 512px; + background: url('./backgrounds-assets/image%2038.svg'); + background-size: contain; + background-repeat: no-repeat; + filter: drop-shadow(10px 10px 4px #000000); +} + +.bg-image-39 { + position: absolute; + width: 492px; + height: 616px; + background: url('./backgrounds-assets/image%2039.svg'); + background-size: contain; + background-repeat: no-repeat; + filter: drop-shadow(10px 10px 4px #000000); +} + +.bg-image-40 { + position: absolute; + width: 704px; + height: 377px; + background: url('./backgrounds-assets/image%2040.svg'); + background-size: contain; + background-repeat: no-repeat; + filter: drop-shadow(10px 10px 4px #000000); + transform: rotate(10.07deg); +} + +.bg-image-41 { + position: absolute; + width: 500px; + height: 616px; + background: url('./backgrounds-assets/image%2041.svg'); + background-size: contain; + background-repeat: no-repeat; + filter: drop-shadow(10px 10px 4px #000000); +} + +.bg-image-42 { + position: absolute; + width: 760px; + height: 664px; + background: url('./backgrounds-assets/image%2042.svg'); + background-size: contain; + background-repeat: no-repeat; + filter: drop-shadow(10px 10px 4px #000000); +} + +.bg-image-43 { + position: absolute; + width: 467px; + height: 596px; + background: url('./backgrounds-assets/image%2043.svg'); + background-size: contain; + background-repeat: no-repeat; + filter: drop-shadow(10px 10px 4px #000000); + transform: rotate(-6.94deg); +} + +.bg-image-44 { + position: absolute; + width: 616px; + height: 540px; + background: url('./backgrounds-assets/image%2044.svg'); + background-size: contain; + background-repeat: no-repeat; + filter: drop-shadow(10px 10px 4px #000000); +} + +.bg-image-46 { + position: absolute; + width: 474px; + height: 528px; + background: url('./backgrounds-assets/image%2046.svg'); + background-size: contain; + background-repeat: no-repeat; + filter: drop-shadow(10px 10px 4px #000000); +} + +.bg-image-47 { + position: absolute; + width: 639px; + height: 439px; + background: url('./backgrounds-assets/image%2047.svg'); + background-size: contain; + background-repeat: no-repeat; + filter: drop-shadow(10px 10px 4px #000000); +} + +.bg-image-48 { + position: absolute; + width: 639px; + height: 439px; + background: url('./backgrounds-assets/image%2048.svg'); + background-size: contain; + background-repeat: no-repeat; + filter: drop-shadow(10px 10px 4px #000000); + transform: rotate(-13.19deg); +} + +.bg-image-49 { + position: absolute; + width: 788px; + height: 788px; + background: url('./backgrounds-assets/image%2049.svg'); + background-size: contain; + background-repeat: no-repeat; + filter: drop-shadow(10px 10px 4px #000000); +} + +.bg-image-50 { + position: absolute; + width: 978px; + height: 1304px; + background: url('./backgrounds-assets/image%2050.svg'); + background-size: contain; + background-repeat: no-repeat; + filter: drop-shadow(10px 10px 4px #000000); +} + +.bg-image-51 { + position: absolute; + width: 1029.07px; + height: 1455.63px; + background: url('./backgrounds-assets/image%2051.svg'); + background-size: contain; + background-repeat: no-repeat; + filter: drop-shadow(10px 10px 4px #000000); + transform: rotate(3.69deg); +} + +.bg-image-53 { + position: absolute; + width: 989px; + height: 1399px; + background: url('./backgrounds-assets/image%2053.svg'); + background-size: contain; + background-repeat: no-repeat; + filter: drop-shadow(10px 10px 4px #000000); +} + +.bg-image-54 { + position: absolute; + width: 604px; + height: 616px; + background: url('./backgrounds-assets/image%2054.svg'); + background-size: contain; + background-repeat: no-repeat; + filter: drop-shadow(10px 10px 4px #000000); + transform: rotate(16.1deg); +} + +.bg-image-55 { + position: absolute; + width: 831px; + height: 512px; + background: url('./backgrounds-assets/image%2055.svg'); + background-size: contain; + background-repeat: no-repeat; + filter: drop-shadow(10px 10px 4px #000000); +} + +.bg-image-56 { + position: absolute; + width: 492px; + height: 616px; + background: url('./backgrounds-assets/image%2056.svg'); + background-size: contain; + background-repeat: no-repeat; + filter: drop-shadow(10px 10px 4px #000000); +} + +.bg-image-57 { + position: absolute; + width: 704px; + height: 377px; + background: url('./backgrounds-assets/image%2057.svg'); + background-size: contain; + background-repeat: no-repeat; + filter: drop-shadow(10px 10px 4px #000000); + transform: rotate(10.07deg); +} + +.bg-image-58 { + position: absolute; + width: 500px; + height: 616px; + background: url('./backgrounds-assets/image%2058.svg'); + background-size: contain; + background-repeat: no-repeat; + filter: drop-shadow(10px 10px 4px #000000); +} + +.bg-image-59 { + position: absolute; + width: 760px; + height: 664px; + background: url('./backgrounds-assets/image%2059.svg'); + background-size: contain; + background-repeat: no-repeat; + filter: drop-shadow(10px 10px 4px #000000); +} + +.bg-image-60 { + position: absolute; + width: 467px; + height: 596px; + background: url('./backgrounds-assets/image%2060.svg'); + background-size: contain; + background-repeat: no-repeat; + filter: drop-shadow(10px 10px 4px #000000); + transform: rotate(-6.94deg); +} + +.bg-image-61 { + position: absolute; + width: 616px; + height: 540px; + background: url('./backgrounds-assets/image%2061.svg'); + background-size: contain; + background-repeat: no-repeat; + filter: drop-shadow(10px 10px 4px #000000); +} + +.bg-image-62 { + position: absolute; + width: 557px; + height: 557px; + background: url('./backgrounds-assets/image%2062.svg'); + background-size: contain; + background-repeat: no-repeat; + filter: drop-shadow(10px 10px 4px #000000); +} + +.bg-image-63 { + position: absolute; + width: 474px; + height: 528px; + background: url('./backgrounds-assets/image%2063.svg'); + background-size: contain; + background-repeat: no-repeat; + filter: drop-shadow(10px 10px 4px #000000); +} + +.bg-image-64 { + position: absolute; + width: 639px; + height: 439px; + background: url('./backgrounds-assets/image%2064.svg'); + background-size: contain; + background-repeat: no-repeat; + filter: drop-shadow(10px 10px 4px #000000); +} + +.bg-image-65 { + position: absolute; + width: 639px; + height: 439px; + background: url('./backgrounds-assets/image%2065.svg'); + background-size: contain; + background-repeat: no-repeat; + filter: drop-shadow(10px 10px 4px #000000); + transform: rotate(-13.19deg); +} + +.bg-image-66 { + position: absolute; + width: 788px; + height: 788px; + background: url('./backgrounds-assets/image%2066.svg'); + background-size: contain; + background-repeat: no-repeat; + filter: drop-shadow(10px 10px 4px #000000); +} + +.bg-image-67 { + position: absolute; + width: 978px; + height: 1304px; + background: url('./backgrounds-assets/image%2067.svg'); + background-size: contain; + background-repeat: no-repeat; + filter: drop-shadow(10px 10px 4px #000000); +} + +.bg-image-68 { + position: absolute; + width: 1029.07px; + height: 1455.63px; + background: url('./backgrounds-assets/image%2068.svg'); + background-size: contain; + background-repeat: no-repeat; + filter: drop-shadow(10px 10px 4px #000000); + transform: rotate(3.69deg); +} + +.bg-image-69 { + position: absolute; + width: 571.25px; + height: 856.88px; + background: url('./backgrounds-assets/image%2069.svg'); + background-size: contain; + background-repeat: no-repeat; + filter: drop-shadow(10px 10px 4px #000000); + transform: rotate(6.2deg); +} + +.bg-image-70 { + position: absolute; + width: 989px; + height: 1399px; + background: url('./backgrounds-assets/image%2070.svg'); + background-size: contain; + background-repeat: no-repeat; + filter: drop-shadow(10px 10px 4px #000000); +} diff --git a/src/lib/assets/images/hackClub.png b/src/lib/assets/images/hackClub.png new file mode 100644 index 0000000..bafc6eb Binary files /dev/null and b/src/lib/assets/images/hackClub.png differ diff --git a/src/lib/assets/images/hackClubLogo.svg b/src/lib/assets/images/hackClubLogo.svg new file mode 100644 index 0000000..38c2a68 --- /dev/null +++ b/src/lib/assets/images/hackClubLogo.svg @@ -0,0 +1,66 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/lib/assets/images/stickers.jpg b/src/lib/assets/images/stickers.jpg new file mode 100644 index 0000000..c775bd5 Binary files /dev/null and b/src/lib/assets/images/stickers.jpg differ diff --git a/src/lib/components/Background.svelte b/src/lib/components/Background.svelte new file mode 100644 index 0000000..d739774 --- /dev/null +++ b/src/lib/components/Background.svelte @@ -0,0 +1,31 @@ + + +
+
+
+ + diff --git a/src/lib/components/Navbar.svelte b/src/lib/components/Navbar.svelte new file mode 100644 index 0000000..807113b --- /dev/null +++ b/src/lib/components/Navbar.svelte @@ -0,0 +1,46 @@ + + + + + diff --git a/src/lib/styles/global.css b/src/lib/styles/global.css new file mode 100644 index 0000000..9ad6d01 --- /dev/null +++ b/src/lib/styles/global.css @@ -0,0 +1,17 @@ +@font-face { + font-family: 'Departure Mono'; + src: url('$lib/assets/fonts/DepartureMono-Regular.woff') format('woff'); + font-weight: 400; + font-style: normal; + font-display: swap; +} + +body { + font-family: 'Departure Mono', monospace; + margin: 0; + padding: 0; +} + +h1, h2, h3, h4, h5, h6, p, a, li, span, button, input, label { + font-family: 'Departure Mono', monospace; +} diff --git a/src/routes/+page.svelte b/src/routes/+page.svelte index 822ccfc..7372358 100644 --- a/src/routes/+page.svelte +++ b/src/routes/+page.svelte @@ -1,16 +1,44 @@ + +
-

Stickers

+

+ +

-

Manage everything sticky! Get free stickers for signing up, hack or trade to earn rare stickers and certify your collection.

+

Manage everything sticky! Get free stickers for signing up, hack or trade to earn rare stickers and certify your collection

- + Loading...
{/snippet} -

*footer joke here

+

*with Hack Club

diff --git a/src/routes/dash/+page.svelte b/src/routes/dash/+page.svelte new file mode 100644 index 0000000..09c25cb --- /dev/null +++ b/src/routes/dash/+page.svelte @@ -0,0 +1,281 @@ + + +
+
+

What's new

+ +
+
+

USER is looking for a sticker that you own! Are you open to trade?

+ + {#snippet topContent()} +
Open
+ {/snippet} + {#snippet backContent()} +
+ {/snippet} + {#snippet bottomContent()} +
+ {/snippet} +
+
+ +
+

STICKER is X% cheaper this week

+ + {#snippet topContent()} +
Shop
+ {/snippet} + {#snippet backContent()} +
+ {/snippet} + {#snippet bottomContent()} +
+ {/snippet} +
+
+ +
+

New sticker drop! Vote on the best option now!

+ + {#snippet topContent()} +
Vote
+ {/snippet} + {#snippet backContent()} +
+ {/snippet} + {#snippet bottomContent()} +
+ {/snippet} +
+
+
+
+ +
+ +
+
+

Your collection

+
+ + +
+
+
+
+ No stickers placed! +
+
+
+
+ + diff --git a/src/routes/earn/+layout.svelte b/src/routes/earn/+layout.svelte new file mode 100644 index 0000000..be1afa9 --- /dev/null +++ b/src/routes/earn/+layout.svelte @@ -0,0 +1,24 @@ + + + + + + + + + +
+ {@render children()} +
+ + diff --git a/src/routes/earn/+page.svelte b/src/routes/earn/+page.svelte new file mode 100644 index 0000000..e69de29 diff --git a/src/routes/leaderboard/+layout.svelte b/src/routes/leaderboard/+layout.svelte new file mode 100644 index 0000000..be1afa9 --- /dev/null +++ b/src/routes/leaderboard/+layout.svelte @@ -0,0 +1,24 @@ + + + + + + + + + +
+ {@render children()} +
+ + diff --git a/src/routes/leaderboard/+page.svelte b/src/routes/leaderboard/+page.svelte new file mode 100644 index 0000000..e69de29 diff --git a/src/routes/leaderboard/page.svelte b/src/routes/leaderboard/page.svelte new file mode 100644 index 0000000..e69de29 diff --git a/src/routes/trade/+layout.svelte b/src/routes/trade/+layout.svelte new file mode 100644 index 0000000..6fda27a --- /dev/null +++ b/src/routes/trade/+layout.svelte @@ -0,0 +1,24 @@ + + + + + + + + + +
+ {@render children()} +
+ + diff --git a/src/routes/trade/+page.svelte b/src/routes/trade/+page.svelte new file mode 100644 index 0000000..e69de29 diff --git a/src/routes/vault/+layout.svelte b/src/routes/vault/+layout.svelte new file mode 100644 index 0000000..023ef25 --- /dev/null +++ b/src/routes/vault/+layout.svelte @@ -0,0 +1,24 @@ + + + + + + + + + +
+ {@render children()} +
+ + diff --git a/src/routes/vault/+page.svelte b/src/routes/vault/+page.svelte new file mode 100644 index 0000000..e69de29