aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/lib/socket.js3
-rw-r--r--src/lib/store.js1
-rw-r--r--src/routes/invoice/[id]/+page.svelte5
-rw-r--r--src/routes/invoice/[id]/paid/+page.svelte2
-rw-r--r--src/routes/launch/+page.svelte33
-rw-r--r--src/routes/launch/purchase/+page.server.js19
-rw-r--r--src/routes/launch/purchase/+page.svelte28
-rw-r--r--src/routes/launch/ticket/+page.server.js9
-rw-r--r--src/routes/launch/ticket/+page.svelte32
-rw-r--r--static/icons/party.svg64
-rw-r--r--static/images/loft.jpgbin0 -> 286853 bytes
11 files changed, 150 insertions, 46 deletions
diff --git a/src/lib/socket.js b/src/lib/socket.js
index fb77333f..b385db9d 100644
--- a/src/lib/socket.js
+++ b/src/lib/socket.js
@@ -19,13 +19,14 @@ export const messages = (data) => ({
rate.set(data);
},
- payment() {
+ async payment() {
let { amount, invoice } = data;
if (get(user).account_id !== data.account_id) return;
if (invoice) {
invoices.set({ ...get(invoices), [invoice.uuid]: invoice });
}
+
newPayment.set(true);
if (amount > 0) {
success(`Received ${amount} sats!`);
diff --git a/src/lib/store.js b/src/lib/store.js
index ffafa70b..e317ed24 100644
--- a/src/lib/store.js
+++ b/src/lib/store.js
@@ -27,7 +27,6 @@ const persistLocal = (key, defaultValue) => {
return s;
};
-export const invoiceRedirect = writable();
export const loginRedirect = writable();
export const rate = writable();
export const user = writable();
diff --git a/src/routes/invoice/[id]/+page.svelte b/src/routes/invoice/[id]/+page.svelte
index 8e9e6ff4..cfff251e 100644
--- a/src/routes/invoice/[id]/+page.svelte
+++ b/src/routes/invoice/[id]/+page.svelte
@@ -1,7 +1,7 @@
<script>
import { copy, f, get, reverseFormat, s, sats } from '$lib/utils';
import { browser } from '$app/environment';
- import { invoices, invoiceRedirect } from '$lib/store';
+ import { invoices } from '$lib/store';
import { Icon, Heart, Image, Qr, Tip } from '$comp';
import { goto } from '$app/navigation';
import { t } from '$lib/translations';
@@ -46,7 +46,7 @@
$invoices[id] = { amount, id, rate, received, text, tip, username };
$: browser &&
$invoices[id]?.received >= $invoices[id]?.amount &&
- goto($invoiceRedirect || `/invoice/${id}/paid`);
+ goto(($invoices[id].memo === 'launch' && '/launch/purchase') || `/invoice/${id}/paid`);
$: amountFiat = parseFloat(((amount * rate) / sats).toFixed(2));
@@ -55,6 +55,7 @@
$: invoiceAmountFiatFormatted = f(amountFiat, currency);
</script>
+{$invoices[id]?.memo}
<div class:full-shadow={showMobileTip}>
<button
class="ml-5 md:ml-20 mt-5 md:mt-10 hover:opacity-80"
diff --git a/src/routes/invoice/[id]/paid/+page.svelte b/src/routes/invoice/[id]/paid/+page.svelte
index 95c721d0..d619b7ff 100644
--- a/src/routes/invoice/[id]/paid/+page.svelte
+++ b/src/routes/invoice/[id]/paid/+page.svelte
@@ -22,7 +22,7 @@
};
</script>
-<div class="container px-4 text-center">
+<div class="container px-4 text-center mx-auto">
<div class="flex w-full py-20 max-w-[200px] mx-auto" in:scale={{ start: 0.5 }}>
<Icon icon="check" style="mx-auto" />
</div>
diff --git a/src/routes/launch/+page.svelte b/src/routes/launch/+page.svelte
index 843c7705..ec649b92 100644
--- a/src/routes/launch/+page.svelte
+++ b/src/routes/launch/+page.svelte
@@ -8,7 +8,7 @@
$loginRedirect = '/launch/purchase';
let hasTicket = !!user?.accounts.find((a) => tickets.includes(a.asset));
- $: link = user ? $loginRedirect : '/register';
+ $: link = hasTicket ? '/launch/ticket' : user ? $loginRedirect : '/register';
$: text = (hasTicket ? 'View' : 'Purchase') + ' Ticket';
beforeNavigate(({ to }) => {
@@ -39,26 +39,35 @@
rel="noreferrer">first commit</a
>!
</p>
- <div class="ml-8">
- <p><b>When</b></p>
- <p>6pm on October 26</p>
- </div>
- <div class="ml-8">
- <p><b>Where</b></p>
- <p>1184 Denman Street, #203</p>
- <p>Vancouver, BC</p>
+
+ <div class="flex">
+ <div class="space-y-5">
+ <div class="ml-8">
+ <p><b>When</b></p>
+ <p>6pm October 26</p>
+ </div>
+ <div class="ml-8">
+ <p><b>Where</b></p>
+ <p>The Loft Lounge</p>
+ <p>1184 Denman Street, #203</p>
+ <p>Vancouver, BC</p>
+ </div>
+ </div>
+
+ <img src="/icons/party.svg" alt="Partygoers" class="w-[120px] mx-auto" />
</div>
<p>
- We'll introduce our new interface for merchants to take bitcoin payments and afterwards
- we'll network and enjoy tasty food and drinks from <a
+ We'll introduce our new interface for merchants to take bitcoin payments, discuss how we
+ can get all of Metro Vancouver on a bitcoin economy, and enjoy tasty food and drinks from <a
href="https://loftondenman.com/"
class="underline">The Loft</a
>!
</p>
<p>
- We're charging a nominal $6 entry fee so we can get an idea of how much space to reserve.
+ We're asking for a nominal $6 entry fee so we can get an idea of how much space to
+ reserve.
</p>
<div class="flex w-full my-8">
diff --git a/src/routes/launch/purchase/+page.server.js b/src/routes/launch/purchase/+page.server.js
index ff5efc84..3317b420 100644
--- a/src/routes/launch/purchase/+page.server.js
+++ b/src/routes/launch/purchase/+page.server.js
@@ -7,16 +7,29 @@ import { browser } from '$app/environment';
export const load = async ({ parent }) => {
let tickets = await get('/tickets');
- return { ...(await parent()), tickets };
+ let { user } = await parent();
+ let hasTicket = !!user?.accounts.find((a) => tickets.includes(a.asset));
+ if (hasTicket) throw redirect(307, '/launch/ticket');
+ return { tickets };
};
export const actions = {
internal: async ({ cookies, request }) => {
+ let form = await request.formData();
+ let username = form.get('username');
+
+ let { address } = await post(
+ '/invoice',
+ { invoice: { network: 'liquid' }, user: { username } },
+ auth(cookies)
+ );
+
let { ticket } = await get('/ticket');
let { asset } = await post(
'/assets',
{
+ address,
name: `Launch Party Ticket ${ticket}`,
ticker: 'LPT',
precision: 0,
@@ -25,9 +38,10 @@ export const actions = {
domain: 'coinos.io',
filename: tickets[ticket]
},
- auth(cookies)
+ { authorization: `Bearer ${env.LAUNCH}` }
);
+ await post('/send', { amount: 25000, username: 'launch' }, auth(cookies));
await post('/ticket', { asset }, { authorization: `Bearer ${env.LAUNCH}` });
throw redirect(307, `/launch/thanks/${asset}`);
@@ -40,6 +54,7 @@ export const actions = {
let invoice = {
amount: 25000,
+ memo: 'launch',
network: 'lightning',
prompt: false,
rate: rates[form.get('currency')]
diff --git a/src/routes/launch/purchase/+page.svelte b/src/routes/launch/purchase/+page.svelte
index d31d20f0..d78b95d2 100644
--- a/src/routes/launch/purchase/+page.svelte
+++ b/src/routes/launch/purchase/+page.svelte
@@ -1,6 +1,7 @@
<script>
+ import { onMount } from 'svelte';
import { enhance } from '$app/forms';
- import { invoiceRedirect, selectedRate } from '$lib/store';
+ import { selectedRate } from '$lib/store';
import { post } from '$lib/utils';
import { goto } from '$app/navigation';
@@ -8,7 +9,6 @@
let amount = 25000;
let {
- address,
currency,
account: { balance },
username
@@ -16,24 +16,6 @@
let { tickets } = data;
let ticket = tickets.length;
-
- let invoice;
- let get = async (network) => {
- let { uuid } = await post('/invoice', {
- amount,
- rate: $selectedRate,
- network,
- username
- });
-
- $invoiceRedirect = '/launch/purchase';
- goto(`/invoice/${uuid}`);
- };
-
- let lightning = () => get('lightning');
- let bitcoin = () => get('bitcoin');
-
- // if (balance < amount) throw redirect(307, `/${username}/fund/${amount - balance}`);
</script>
<div class="mx-auto h-screen flex items-center justify-center px-4">
@@ -48,9 +30,10 @@
alt="Ticket"
/>
- {#if balance > amount}
+ {#if balance >= amount}
<form action="?/internal" method="POST" use:enhance>
- <input type="hidden" name="ticket" value={ticket} />
+ <input type="hidden" name="username" value={username} />
+
<div class="w-full flex">
<button
class="bg-black text-white border rounded-full px-8 py-4 font-bold hover:opacity-80 mx-auto text-2xl"
@@ -77,7 +60,6 @@
<form action="?/bitcoin" method="POST">
<button
class="bg-black text-white border rounded-full px-8 py-4 font-bold hover:opacity-80 mx-auto text-2xl"
- on:click={bitcoin}
>
Bitcoin
</button>
diff --git a/src/routes/launch/ticket/+page.server.js b/src/routes/launch/ticket/+page.server.js
new file mode 100644
index 00000000..59ea966e
--- /dev/null
+++ b/src/routes/launch/ticket/+page.server.js
@@ -0,0 +1,9 @@
+import { get } from '$lib/utils';
+
+export const load = async ({ cookies, parent }) => {
+ let { user } = await parent();
+ let tickets = await get('/tickets');
+ let ticket = tickets.findIndex((t) => user.accounts.find((a) => a.asset === t));
+ console.log("TICK", ticket)
+ return { ticket };
+};
diff --git a/src/routes/launch/ticket/+page.svelte b/src/routes/launch/ticket/+page.svelte
index 229c18f0..2585c57c 100644
--- a/src/routes/launch/ticket/+page.svelte
+++ b/src/routes/launch/ticket/+page.svelte
@@ -1,4 +1,28 @@
-<img
- src={`/tickets/${(ticket + 1).toString().padStart(2, '0')}.png`}
- class="w-full max-w-[800px]"
-/>
+<script>
+ export let data;
+ let { ticket } = data;
+</script>
+
+<div class="mx-auto h-screen flex items-center justify-center px-4">
+ <div class="font-normal text-gray-800 mx-auto mb-8 space-y-8">
+ <h1 class="mb-4 text-4xl font-bold leading-none tracking-tight text-gray-800 text-center">
+ Your Ticket
+ </h1>
+
+ <img
+ src={`/tickets/${(ticket + 1).toString().padStart(2, '0')}.png`}
+ class="w-full max-w-[800px]"
+ alt="Ticket"
+ />
+
+ <div class="w-full flex">
+ <a href="/" class="mx-auto">
+ <button
+ class="bg-black text-white border rounded-full px-8 py-4 font-bold hover:opacity-80 text-2xl"
+ >
+ Done
+ </button>
+ </a>
+ </div>
+ </div>
+</div>
diff --git a/static/icons/party.svg b/static/icons/party.svg
new file mode 100644
index 00000000..f33b9fc1
--- /dev/null
+++ b/static/icons/party.svg
@@ -0,0 +1,64 @@
+<?xml version="1.0" encoding="iso-8859-1"?>
+<!-- Generator: Adobe Illustrator 19.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+ viewBox="0 0 300.948 300.948" style="enable-background:new 0 0 300.948 300.948;" xml:space="preserve">
+<g id="XMLID_1505_">
+ <g>
+ <g>
+ <path d="M132.166,219.612L120.7,189.007l-18.92,25.645l4.57,12.2l1.089,52.22c0.152,7.28,6.101,13.079,13.349,13.079
+ c0.094,0,0.189-0.001,0.284-0.003c7.375-0.154,13.229-6.257,13.076-13.632l-1.137-54.496
+ C132.98,222.513,132.694,221.023,132.166,219.612z"/>
+ <circle cx="92.165" cy="50.896" r="23.069"/>
+ <path d="M170.846,40.209c-4.878-3.74-11.866-2.818-15.606,2.061l-29.253,38.153l-12.6,2.504c-2.239-1.26-4.819-1.987-7.57-1.997
+ l-27.79-0.113c-8.606-0.035-15.612,6.914-15.647,15.521l-0.041,10.148c5.894-4.85,10.2-8.395,16.342-13.449l-27.839,36.752
+ c-2.212,3.006-2.77,6.913-1.494,10.412l15.522,42.623c2.131,5.848,8.593,8.715,14.271,6.644c5.774-2.105,8.75-8.493,6.644-14.271
+ l-13.189-36.173l25.099-34.09l-1.65,4.137c-2.548,6.388-9.458,23.716-12.013,30.124c9.171,25.153,8.43,23.12,11.792,32.342
+ c4.13,11.328-1.694,23.839-13.023,27.969c-5.156,1.88-10.876,1.768-16.015-0.416l-6.946,9.415L7.481,234.98
+ c-6.635,3.253-9.357,11.259-6.115,17.872c3.249,6.627,11.25,9.361,17.872,6.115l55.291-27.913
+ c1.927-0.944,3.596-2.338,4.87-4.064l39.4-53.405c2.39-3.245,2.291-6.351,2.272-10.854l0.238-58.684l13.132-2.61
+ c2.651-0.527,5.019-2,6.663-4.145l31.803-41.48C176.646,50.936,175.724,43.949,170.846,40.209z"/>
+ <path d="M250.435,216.627c-2.072,3.485-1.699,6.841-1.363,9.642l6.507,54.118c0.881,7.325,7.533,12.547,14.856,11.667
+ c7.324-0.88,12.547-7.532,11.667-14.856l-6.236-51.857l7.302-32.973L250.435,216.627z"/>
+ <circle cx="255.17" cy="49.131" r="23.069"/>
+ <path d="M300.801,157.11c-0.001-0.005-0.001-0.009-0.002-0.013l-9.775-67.144c-1.24-8.517-9.15-14.416-17.666-13.176
+ l-27.433,3.994l-25.751-17.246l-12.368-46.457c-1.582-5.94-7.68-9.474-13.62-7.892c-5.94,1.581-9.474,7.679-7.892,13.62
+ l13.447,50.51c0.696,2.612,2.317,4.881,4.563,6.385l25.379,16.996c29.946-8.374,25.085-7.015,34.511-9.651l-36.571,21.323
+ l-34.561-16.97c-5.132-2.52-11.407-0.729-14.403,4.194c-3.469,5.696-1.193,12.949,4.591,15.789
+ c44.139,21.651,40.969,20.131,41.842,20.447c3.002,1.088,6.429,0.864,9.395-0.846l39.51-23.763l-35.156,33.548l3.577,24.567
+ l18.423-2.959l-43.669,32.365c-1.723,1.278-3.113,2.95-4.053,4.879l-27.793,55.352c-3.232,6.631-0.477,14.626,6.154,17.859
+ c6.617,3.225,14.619,0.49,17.859-6.154l26.362-52.417c44.648-33.09,34.888-25.947,59.437-43.736
+ C299.365,167.448,301.554,162.275,300.801,157.11z"/>
+ </g>
+ </g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+</svg>
diff --git a/static/images/loft.jpg b/static/images/loft.jpg
new file mode 100644
index 00000000..39ca49ab
--- /dev/null
+++ b/static/images/loft.jpg
Binary files differ