├── api ├── __init__.py ├── migrations │ ├── README │ ├── script.py.mako │ ├── versions │ │ ├── 51f2466fa172_add_xpub.py │ │ ├── 1a2cb89c865c_add_nostr_profile_image.py │ │ ├── 842599b62770_add_item_category.py │ │ ├── 8e5794f2abd4_make_skin_in_the_game_optional_per_.py │ │ ├── 11234423a696_remove_cancel.py │ │ ├── 17cfd040c3ea_add_campaign_banner.py │ │ ├── 0b933fdb55c0_add_is_featured_to_auction.py │ │ ├── 1ce2e632ba08_add_usd_price_to_sales.py │ │ ├── 7bfdc024cc59_make_verified_identities_required_optional.py │ │ ├── b1b8a655e102_add_stall_settings.py │ │ ├── 9055e2033d85_add_shipping_location.py │ │ ├── 81fd68652e8b_add_auction_created_at.py │ │ ├── 788294334544_add_twitter_profile_picture.py │ │ ├── 7b9b9d83c135_add_verification_tweet_id.py │ │ ├── 3bbdeac35736_add_order_paid_at.py │ │ ├── f4c195bdf6c4_add_shipping_date.py │ │ ├── 673138f33cbb_add_wallet_name.py │ │ ├── 5883dd3619bf_remove_is_hidden.py │ │ ├── 906f050d11ff_add_lnauth_key_name.py │ │ ├── e74ff40a1b2a_add_nostr_columns.py │ │ ├── b06199cd8026_add_lightning_address.py │ │ ├── d711e375a2ec_add_xpub_to_campaigns.py │ │ ├── 7218961e6757_support_digital_items.py │ │ ├── d940f3567a1c_add_stall_name_and_description.py │ │ ├── a0a088a1ee6c_differentiate_cancellation_from_.py │ │ ├── 3e2210c258eb_add_index.py │ │ ├── fc10599148c8_add_shipping_estimates.py │ │ ├── f16c319d7a0f_nostr_auth_without_dm.py │ │ ├── f25b308df569_add_stall_shipping.py │ │ ├── b8f9a7b65af3_add_badge_owner.py │ │ ├── 00b5877a8e77_add_user_email.py │ │ ├── 5b918d4f5903_user_migration.py │ │ ├── 4a22bfdccc90_add_auctions_to_order.py │ │ ├── 4ff050ac2527_store_badge_purchase_info.py │ │ ├── 26bef93a849b_allow_items_with_infinite_quantity.py │ │ ├── e1fdec1dded2_alter_auction_final_flow.py │ │ ├── fcecd5eab28d_store_bid_event_id.py │ │ ├── 0d4d373978f2_deal_with_duplicate_keys.py │ │ ├── 4c6c784e30e1_nostr_stalls.py │ │ ├── 8662155d4e64_bids_don_t_need_lightning_anymore.py │ │ ├── 7cef5f311cbb_make_duration_hours_into_a_float.py │ │ ├── 4ba6c5d104b3_store_stall_nostr_event_id.py │ │ ├── 8d076a2b6337_add_telegram_username.py │ │ ├── 49e0b6e975b1_increase_order_uuid_size.py │ │ ├── 03d388ba77ea_add_extra_checks_for_verification_phrase.py │ │ └── 0387087d8cfb_save_bidder_pubkey.py │ └── alembic.ini ├── extensions.py ├── Dockerfile └── requirements.txt ├── web ├── backoffice │ ├── .npmrc │ ├── .env.staging │ ├── .env.production │ ├── .env.development │ ├── .gitignore │ ├── src │ │ ├── lib │ │ │ ├── components │ │ │ │ ├── notifications │ │ │ │ │ ├── InfoBox.svelte │ │ │ │ │ ├── WarningBox.svelte │ │ │ │ │ ├── Wallets.svelte │ │ │ │ │ └── ErrorBox.svelte │ │ │ │ ├── stores │ │ │ │ │ └── ShoppingCart.svelte │ │ │ │ ├── RelayRow.svelte │ │ │ │ ├── MonthPicker.svelte │ │ │ │ ├── QR.svelte │ │ │ │ ├── Confirmation.svelte │ │ │ │ ├── YearPicker.svelte │ │ │ │ ├── auth │ │ │ │ │ └── Choice.svelte │ │ │ │ ├── NewSite.svelte │ │ │ │ ├── settings │ │ │ │ │ └── Nostr.svelte │ │ │ │ └── DateFormatter.svelte │ │ │ ├── images │ │ │ │ ├── spaceship.jpg │ │ │ │ ├── space-cat-400x400.png │ │ │ │ └── Bitko-Illustration-Faketoshi.png │ │ │ ├── types │ │ │ │ ├── base.ts │ │ │ │ └── relay.ts │ │ │ └── stores.ts │ │ ├── app.d.ts │ │ └── routes │ │ │ ├── +layout.js │ │ │ └── account │ │ │ └── orders │ │ │ └── +page.svelte │ ├── postcss.config.cjs │ ├── static │ │ ├── images │ │ │ ├── logo.jpg │ │ │ ├── logo.png │ │ │ ├── bitko_01.png │ │ │ ├── bitko_02.png │ │ │ ├── bitko_03.png │ │ │ ├── icons │ │ │ │ ├── favicon.ico │ │ │ │ ├── favicon-16x16.png │ │ │ │ ├── favicon-32x32.png │ │ │ │ ├── mstile-150x150.png │ │ │ │ ├── apple-touch-icon.png │ │ │ │ ├── android-chrome-96x96.png │ │ │ │ ├── android-chrome-192x192.png │ │ │ │ ├── android-chrome-512x512.png │ │ │ │ └── browserconfig.xml │ │ │ ├── Plebeian_Logo_OpenGraph.png │ │ │ └── screenshots │ │ │ │ ├── screenshot_homepage.jpg │ │ │ │ └── screenshot_market_square.jpg │ │ └── .well-known │ │ │ ├── nostr.json │ │ │ └── assetlinks.json │ ├── .env │ ├── vite.config.js │ ├── tests │ │ └── example.spec.ts │ ├── svelte.config.js │ ├── jsconfig.json │ ├── .eslintrc.cjs │ └── tailwind.config.cjs ├── frontoffice │ ├── .npmrc │ ├── .env.staging │ ├── .env.development │ ├── src │ │ ├── routes │ │ │ ├── [...slug] │ │ │ │ └── +page.ts │ │ │ ├── product │ │ │ │ └── [product_id] │ │ │ │ │ ├── +page.ts │ │ │ │ │ └── +page.svelte │ │ │ ├── p │ │ │ │ └── [pubkey] │ │ │ │ │ ├── stall │ │ │ │ │ └── [stallId] │ │ │ │ │ │ └── +page.ts │ │ │ │ │ └── +page.ts │ │ │ ├── faq │ │ │ │ └── +page.svelte │ │ │ ├── stalls │ │ │ │ └── +page.svelte │ │ │ ├── cart │ │ │ │ └── +page.svelte │ │ │ ├── nostr │ │ │ │ └── +page.svelte │ │ │ ├── planet │ │ │ │ └── +page.svelte │ │ │ ├── marketsquare │ │ │ │ └── +page.svelte │ │ │ ├── +layout.js │ │ │ ├── donations │ │ │ │ └── +page.svelte │ │ │ └── skills │ │ │ │ └── +page.svelte │ │ ├── lib │ │ │ ├── images │ │ │ │ ├── golden-gai-tokyo.jpg │ │ │ │ └── product_image_fallback.svg │ │ │ ├── components │ │ │ │ ├── Notifications.svelte │ │ │ │ ├── nostr │ │ │ │ │ ├── ImagePreview.svelte │ │ │ │ │ ├── types.ts │ │ │ │ │ ├── SimpleNote.svelte │ │ │ │ │ └── Nip05Checkmark.svelte │ │ │ │ ├── MonthPicker.svelte │ │ │ │ ├── Confirmation.svelte │ │ │ │ ├── YearPicker.svelte │ │ │ │ ├── QRLocal.svelte │ │ │ │ ├── TweetButton.svelte │ │ │ │ ├── Typewriter.svelte │ │ │ │ └── DateFormatter.svelte │ │ │ ├── stores.ts │ │ │ └── types │ │ │ │ └── stall.ts │ │ ├── app.d.ts │ │ ├── app.css │ │ └── app.html │ ├── static │ │ ├── team │ │ │ ├── mtc.jpg │ │ │ ├── bekka.jpg │ │ │ ├── gzuuus.webp │ │ │ ├── chiefmonkey.jpg │ │ │ ├── hodlonaut.jpg │ │ │ ├── luismiguel.jpg │ │ │ └── bitkoyinowsky.jpg │ │ ├── badges │ │ │ ├── og.png │ │ │ ├── tester.png │ │ │ └── skin-in-the-game.png │ │ ├── images │ │ │ ├── logo.jpg │ │ │ ├── logo.png │ │ │ ├── icons │ │ │ │ ├── favicon.ico │ │ │ │ ├── favicon-16x16.png │ │ │ │ ├── favicon-32x32.png │ │ │ │ ├── mstile-150x150.png │ │ │ │ ├── apple-touch-icon.png │ │ │ │ ├── android-chrome-192x192.png │ │ │ │ ├── android-chrome-512x512.png │ │ │ │ ├── browserconfig.xml │ │ │ │ └── site.webmanifest │ │ │ ├── Plebeian_Logo_OpenGraph.png │ │ │ └── screenshots │ │ │ │ ├── screenshot_homepage.jpg │ │ │ │ └── screenshot_market_square.jpg │ │ ├── .well-known │ │ │ ├── nostr.json │ │ │ └── assetlinks.json │ │ ├── config-example.json │ │ └── config-pm.json │ ├── .gitignore │ ├── postcss.config.cjs │ ├── .env.production │ ├── vite.config.js │ ├── .env │ ├── jsconfig.json │ ├── .eslintrc.cjs │ └── svelte.config.js ├── shared │ ├── .npmrc │ ├── vite.config.ts │ ├── .gitignore │ ├── src │ │ └── lib │ │ │ ├── components │ │ │ ├── pagebuilder │ │ │ │ ├── lexical-editor │ │ │ │ │ ├── createEmptyRichText.ts │ │ │ │ │ ├── images │ │ │ │ │ │ └── icons │ │ │ │ │ │ │ ├── plus.svg │ │ │ │ │ │ │ ├── font-color.svg │ │ │ │ │ │ │ ├── lock-fill.svg │ │ │ │ │ │ │ ├── caret-right-fill.svg │ │ │ │ │ │ │ ├── success-alt.svg │ │ │ │ │ │ │ ├── success.svg │ │ │ │ │ │ │ ├── type-h1.svg │ │ │ │ │ │ │ ├── chevron-down.svg │ │ │ │ │ │ │ ├── type-h4.svg │ │ │ │ │ │ │ ├── lock.svg │ │ │ │ │ │ │ ├── type-underline.svg │ │ │ │ │ │ │ ├── chat-right.svg │ │ │ │ │ │ │ ├── type-italic.svg │ │ │ │ │ │ │ ├── arrow-clockwise.svg │ │ │ │ │ │ │ ├── code.svg │ │ │ │ │ │ │ ├── font-family.svg │ │ │ │ │ │ │ ├── arrow-counterclockwise.svg │ │ │ │ │ │ │ ├── table.svg │ │ │ │ │ │ │ ├── draggable-block-menu.svg │ │ │ │ │ │ │ ├── horizontal-rule.svg │ │ │ │ │ │ │ ├── send.svg │ │ │ │ │ │ │ ├── file-image.svg │ │ │ │ │ │ │ ├── plus-slash-minus.svg │ │ │ │ │ │ │ ├── link.svg │ │ │ │ │ │ │ ├── mic.svg │ │ │ │ │ │ │ ├── justify.svg │ │ │ │ │ │ │ ├── text-left.svg │ │ │ │ │ │ │ ├── text-center.svg │ │ │ │ │ │ │ ├── text-right.svg │ │ │ │ │ │ │ ├── upload.svg │ │ │ │ │ │ │ ├── download.svg │ │ │ │ │ │ │ ├── text-paragraph.svg │ │ │ │ │ │ │ ├── copy.svg │ │ │ │ │ │ │ ├── sticky.svg │ │ │ │ │ │ │ ├── list-ul.svg │ │ │ │ │ │ │ ├── square-check.svg │ │ │ │ │ │ │ ├── chat-right-dots.svg │ │ │ │ │ │ │ ├── type-bold.svg │ │ │ │ │ │ │ ├── type-h2.svg │ │ │ │ │ │ │ ├── clipboard.svg │ │ │ │ │ │ │ ├── outdent.svg │ │ │ │ │ │ │ ├── indent.svg │ │ │ │ │ │ │ ├── file-earmark-text.svg │ │ │ │ │ │ │ ├── chat-left-text.svg │ │ │ │ │ │ │ ├── chat-right-text.svg │ │ │ │ │ │ │ ├── user.svg │ │ │ │ │ │ │ ├── trash.svg │ │ │ │ │ │ │ ├── type-strikethrough.svg │ │ │ │ │ │ │ ├── pencil-fill.svg │ │ │ │ │ │ │ ├── plug-fill.svg │ │ │ │ │ │ │ ├── type-h5.svg │ │ │ │ │ │ │ ├── camera.svg │ │ │ │ │ │ │ ├── close.svg │ │ │ │ │ │ │ ├── tweet.svg │ │ │ │ │ │ │ ├── type-h3.svg │ │ │ │ │ │ │ ├── bg-color.svg │ │ │ │ │ │ │ ├── markdown.svg │ │ │ │ │ │ │ ├── plug.svg │ │ │ │ │ │ │ ├── comments.svg │ │ │ │ │ │ │ ├── trash3.svg │ │ │ │ │ │ │ ├── card-checklist.svg │ │ │ │ │ │ │ ├── chat-square-quote.svg │ │ │ │ │ │ │ ├── type-superscript.svg │ │ │ │ │ │ │ ├── type-subscript.svg │ │ │ │ │ │ │ ├── journal-text.svg │ │ │ │ │ │ │ ├── journal-code.svg │ │ │ │ │ │ │ ├── palette.svg │ │ │ │ │ │ │ ├── diagram-2.svg │ │ │ │ │ │ │ ├── youtube.svg │ │ │ │ │ │ │ ├── list-ol.svg │ │ │ │ │ │ │ ├── filetype-gif.svg │ │ │ │ │ │ │ └── type-h6.svg │ │ │ │ │ ├── themes │ │ │ │ │ │ ├── CommentEditorTheme.css │ │ │ │ │ │ ├── StickyEditorTheme.css │ │ │ │ │ │ ├── StickyEditorTheme.ts │ │ │ │ │ │ └── CommentEditorTheme.ts │ │ │ │ │ ├── ui │ │ │ │ │ │ └── Switch.svelte │ │ │ │ │ └── settings │ │ │ │ │ │ └── setupEnv.ts │ │ │ │ ├── SectionsImageBanner.svelte │ │ │ │ └── ProductCardCTA.svelte │ │ │ ├── layout │ │ │ │ └── Title-h1.svelte │ │ │ ├── icons │ │ │ │ ├── X.svelte │ │ │ │ ├── Search.svelte │ │ │ │ ├── ArrowLeft.svelte │ │ │ │ ├── Clock.svelte │ │ │ │ ├── Hamburger.svelte │ │ │ │ ├── DragBars.svelte │ │ │ │ ├── Info.svelte │ │ │ │ ├── SendMessage.svelte │ │ │ │ ├── AlertInfo.svelte │ │ │ │ ├── Minus.svelte │ │ │ │ ├── Contract.svelte │ │ │ │ ├── Home.svelte │ │ │ │ ├── Exit.svelte │ │ │ │ ├── User.svelte │ │ │ │ ├── Expand.svelte │ │ │ │ ├── Plus.svelte │ │ │ │ ├── Substack.svelte │ │ │ │ ├── Moon.svelte │ │ │ │ ├── Settings.svelte │ │ │ │ ├── WinnerBadge.svelte │ │ │ │ ├── Key.svelte │ │ │ │ ├── Book.svelte │ │ │ │ ├── Edit.svelte │ │ │ │ ├── Email.svelte │ │ │ │ ├── Back.svelte │ │ │ │ ├── Support.svelte │ │ │ │ ├── Share.svelte │ │ │ │ ├── ShoppingCart.svelte │ │ │ │ ├── Copy.svelte │ │ │ │ ├── Eye.svelte │ │ │ │ ├── Eye-slash.svelte │ │ │ │ ├── Phone.svelte │ │ │ │ ├── Trash.svelte │ │ │ │ ├── Question.svelte │ │ │ │ ├── Twitter.svelte │ │ │ │ ├── World.svelte │ │ │ │ ├── Cash.svelte │ │ │ │ ├── ViewCards.svelte │ │ │ │ ├── Chat.svelte │ │ │ │ ├── Github.svelte │ │ │ │ ├── Tools.svelte │ │ │ │ ├── Identities.svelte │ │ │ │ ├── Store.svelte │ │ │ │ ├── VerificationMark.svelte │ │ │ │ ├── Sun.svelte │ │ │ │ └── Telegram.svelte │ │ │ ├── notifications │ │ │ │ └── InfoBox.svelte │ │ │ ├── FiatChooser.svelte │ │ │ └── nostr │ │ │ │ └── ProfilePicture.svelte │ │ │ └── images │ │ │ ├── badge_placeholder.svg │ │ │ └── profile_picture_placeholder.svg │ ├── .eslintignore │ ├── tsconfig.json │ ├── .eslintrc.cjs │ └── svelte.config.js └── Dockerfile ├── services ├── postfix │ └── Dockerfile ├── strfry │ └── Dockerfile ├── nginx │ └── Dockerfile └── postgres │ └── Dockerfile ├── birdwatcher ├── requirements.txt └── Dockerfile ├── scripts ├── dev.sh ├── exec_shell.sh ├── exec_psql.sh ├── exec_pgdump.sh ├── exec_lnauth.sh ├── exec_lnverify.sh ├── exec.sh ├── test.sh ├── prod.sh ├── staging.sh └── do.sh ├── .gitignore ├── ln_payments_processor ├── Dockerfile └── requirements.txt ├── .env.prod ├── .env.staging ├── .env.test ├── .env.dev ├── docker-compose.test.yml └── docker-compose.prod.yml /api/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /web/backoffice/.npmrc: -------------------------------------------------------------------------------- 1 | engine-strict=true 2 | -------------------------------------------------------------------------------- /web/frontoffice/.npmrc: -------------------------------------------------------------------------------- 1 | engine-strict=true 2 | -------------------------------------------------------------------------------- /services/postfix/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM boky/postfix:latest -------------------------------------------------------------------------------- /api/migrations/README: -------------------------------------------------------------------------------- 1 | Single-database configuration for Flask. 2 | -------------------------------------------------------------------------------- /web/shared/.npmrc: -------------------------------------------------------------------------------- 1 | engine-strict=true 2 | resolution-mode=highest 3 | -------------------------------------------------------------------------------- /web/backoffice/.env.staging: -------------------------------------------------------------------------------- 1 | VITE_BASE_URL=${WWW_BASE_URL}/ 2 | VITE_API_BASE_URL=${API_BASE_URL}/ 3 | -------------------------------------------------------------------------------- /web/frontoffice/.env.staging: -------------------------------------------------------------------------------- 1 | VITE_BASE_URL=${WWW_BASE_URL}/ 2 | VITE_API_BASE_URL=${API_BASE_URL}/ 3 | -------------------------------------------------------------------------------- /web/backoffice/.env.production: -------------------------------------------------------------------------------- 1 | VITE_BASE_URL=${WWW_BASE_URL}/ 2 | VITE_API_BASE_URL=${API_BASE_URL}/ 3 | -------------------------------------------------------------------------------- /birdwatcher/requirements.txt: -------------------------------------------------------------------------------- 1 | aiofile 2 | aiohttp 3 | arsenic 4 | bech32 5 | bs4 6 | requests 7 | websockets 8 | -------------------------------------------------------------------------------- /scripts/dev.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | DIR="$(cd "$(dirname "$0")" && pwd)" 4 | 5 | $DIR/do.sh dev up --build 6 | -------------------------------------------------------------------------------- /scripts/exec_shell.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | DIR="$(cd "$(dirname "$0")" && pwd)" 4 | 5 | $DIR/exec.sh api bash 6 | -------------------------------------------------------------------------------- /services/strfry/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM dockurr/strfry:latest 2 | 3 | COPY ./services/strfry/strfry.conf /etc/strfry.conf 4 | -------------------------------------------------------------------------------- /web/backoffice/.env.development: -------------------------------------------------------------------------------- 1 | VITE_BASE_URL=http://localhost:5173/ 2 | VITE_API_BASE_URL=http://localhost:5000/ 3 | -------------------------------------------------------------------------------- /web/frontoffice/.env.development: -------------------------------------------------------------------------------- 1 | VITE_BASE_URL=http://localhost:5173/ 2 | VITE_API_BASE_URL=http://localhost:5000/ 3 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | __pycache__ 2 | *.egg-info 3 | venv 4 | *.DS_Store 5 | /.idea 6 | .svelte-kit/ 7 | node_modules/ 8 | pm.log* 9 | -------------------------------------------------------------------------------- /web/frontoffice/src/routes/[...slug]/+page.ts: -------------------------------------------------------------------------------- 1 | export async function load({ params }) { 2 | return params; 3 | } 4 | -------------------------------------------------------------------------------- /scripts/exec_psql.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | DIR="$(cd "$(dirname "$0")" && pwd)" 4 | 5 | $DIR/exec.sh db psql -Upleb market 6 | -------------------------------------------------------------------------------- /scripts/exec_pgdump.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | DIR="$(cd "$(dirname "$0")" && pwd)" 4 | 5 | $DIR/exec.sh db pg_dump -Upleb market 6 | -------------------------------------------------------------------------------- /web/frontoffice/src/routes/product/[product_id]/+page.ts: -------------------------------------------------------------------------------- 1 | export async function load({ params }) { 2 | return params; 3 | } 4 | -------------------------------------------------------------------------------- /web/backoffice/.gitignore: -------------------------------------------------------------------------------- 1 | .svelte-kit/ 2 | node_modules/ 3 | build/ 4 | /test-results/ 5 | /playwright-report/ 6 | /playwright/.cache/ 7 | -------------------------------------------------------------------------------- /web/backoffice/src/lib/components/notifications/InfoBox.svelte: -------------------------------------------------------------------------------- 1 |
2 | 3 |
4 | -------------------------------------------------------------------------------- /web/frontoffice/src/routes/p/[pubkey]/stall/[stallId]/+page.ts: -------------------------------------------------------------------------------- 1 | export async function load({ params }) { 2 | return params; 3 | } 4 | -------------------------------------------------------------------------------- /web/frontoffice/static/team/mtc.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PlebeianApp/plebeian-market-old/HEAD/web/frontoffice/static/team/mtc.jpg -------------------------------------------------------------------------------- /scripts/exec_lnauth.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | DIR="$(cd "$(dirname "$0")" && pwd)" 4 | 5 | KEY=$1 6 | 7 | $DIR/exec.sh api flask lnauth $1 8 | -------------------------------------------------------------------------------- /web/backoffice/postcss.config.cjs: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | plugins: { 3 | tailwindcss: {}, 4 | autoprefixer: {}, 5 | }, 6 | } 7 | -------------------------------------------------------------------------------- /web/backoffice/src/lib/components/stores/ShoppingCart.svelte: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /web/backoffice/static/images/logo.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PlebeianApp/plebeian-market-old/HEAD/web/backoffice/static/images/logo.jpg -------------------------------------------------------------------------------- /web/backoffice/static/images/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PlebeianApp/plebeian-market-old/HEAD/web/backoffice/static/images/logo.png -------------------------------------------------------------------------------- /web/frontoffice/static/badges/og.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PlebeianApp/plebeian-market-old/HEAD/web/frontoffice/static/badges/og.png -------------------------------------------------------------------------------- /web/frontoffice/static/images/logo.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PlebeianApp/plebeian-market-old/HEAD/web/frontoffice/static/images/logo.jpg -------------------------------------------------------------------------------- /web/frontoffice/static/images/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PlebeianApp/plebeian-market-old/HEAD/web/frontoffice/static/images/logo.png -------------------------------------------------------------------------------- /web/frontoffice/static/team/bekka.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PlebeianApp/plebeian-market-old/HEAD/web/frontoffice/static/team/bekka.jpg -------------------------------------------------------------------------------- /scripts/exec_lnverify.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | DIR="$(cd "$(dirname "$0")" && pwd)" 4 | 5 | KEY=$1 6 | 7 | $DIR/exec.sh api flask lnverify $1 8 | -------------------------------------------------------------------------------- /web/frontoffice/static/badges/tester.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PlebeianApp/plebeian-market-old/HEAD/web/frontoffice/static/badges/tester.png -------------------------------------------------------------------------------- /web/frontoffice/static/team/gzuuus.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PlebeianApp/plebeian-market-old/HEAD/web/frontoffice/static/team/gzuuus.webp -------------------------------------------------------------------------------- /scripts/exec.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | CONTAINER_NAME=$1 4 | shift 5 | 6 | docker exec -e FLASK_APP=main -it `docker ps -aqf "name=$CONTAINER_NAME"` $@ 7 | -------------------------------------------------------------------------------- /web/backoffice/src/lib/images/spaceship.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PlebeianApp/plebeian-market-old/HEAD/web/backoffice/src/lib/images/spaceship.jpg -------------------------------------------------------------------------------- /web/backoffice/static/images/bitko_01.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PlebeianApp/plebeian-market-old/HEAD/web/backoffice/static/images/bitko_01.png -------------------------------------------------------------------------------- /web/backoffice/static/images/bitko_02.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PlebeianApp/plebeian-market-old/HEAD/web/backoffice/static/images/bitko_02.png -------------------------------------------------------------------------------- /web/backoffice/static/images/bitko_03.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PlebeianApp/plebeian-market-old/HEAD/web/backoffice/static/images/bitko_03.png -------------------------------------------------------------------------------- /web/frontoffice/static/team/chiefmonkey.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PlebeianApp/plebeian-market-old/HEAD/web/frontoffice/static/team/chiefmonkey.jpg -------------------------------------------------------------------------------- /web/frontoffice/static/team/hodlonaut.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PlebeianApp/plebeian-market-old/HEAD/web/frontoffice/static/team/hodlonaut.jpg -------------------------------------------------------------------------------- /web/frontoffice/static/team/luismiguel.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PlebeianApp/plebeian-market-old/HEAD/web/frontoffice/static/team/luismiguel.jpg -------------------------------------------------------------------------------- /scripts/test.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | DIR="$(cd "$(dirname "$0")" && pwd)" 4 | 5 | $DIR/do.sh test build && $DIR/do.sh test up --abort-on-container-exit 6 | -------------------------------------------------------------------------------- /web/frontoffice/static/team/bitkoyinowsky.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PlebeianApp/plebeian-market-old/HEAD/web/frontoffice/static/team/bitkoyinowsky.jpg -------------------------------------------------------------------------------- /web/backoffice/static/.well-known/nostr.json: -------------------------------------------------------------------------------- 1 | { 2 | "names": { 3 | "_": "df476caf4888bf5d99c6a710ea6ae943d3e693d29cdc75c4eff1cfb634839bb8" 4 | } 5 | } 6 | -------------------------------------------------------------------------------- /web/backoffice/static/images/icons/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PlebeianApp/plebeian-market-old/HEAD/web/backoffice/static/images/icons/favicon.ico -------------------------------------------------------------------------------- /web/frontoffice/.gitignore: -------------------------------------------------------------------------------- 1 | .svelte-kit/ 2 | node_modules/ 3 | build/ 4 | /test-results/ 5 | /playwright-report/ 6 | /playwright/.cache/ 7 | /static/config.json 8 | -------------------------------------------------------------------------------- /web/frontoffice/src/routes/p/[pubkey]/+page.ts: -------------------------------------------------------------------------------- 1 | export async function load({ params }) { 2 | const { pubkey } = params; 3 | return { pubkey }; 4 | } 5 | -------------------------------------------------------------------------------- /web/frontoffice/static/.well-known/nostr.json: -------------------------------------------------------------------------------- 1 | { 2 | "names": { 3 | "_": "df476caf4888bf5d99c6a710ea6ae943d3e693d29cdc75c4eff1cfb634839bb8" 4 | } 5 | } 6 | -------------------------------------------------------------------------------- /web/frontoffice/static/images/icons/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PlebeianApp/plebeian-market-old/HEAD/web/frontoffice/static/images/icons/favicon.ico -------------------------------------------------------------------------------- /scripts/prod.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | DIR="$(cd "$(dirname "$0")" && pwd)" 4 | 5 | $DIR/do.sh prod build && $DIR/do.sh prod down --volumes && $DIR/do.sh prod up -d 6 | -------------------------------------------------------------------------------- /web/frontoffice/static/badges/skin-in-the-game.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PlebeianApp/plebeian-market-old/HEAD/web/frontoffice/static/badges/skin-in-the-game.png -------------------------------------------------------------------------------- /web/backoffice/src/lib/images/space-cat-400x400.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PlebeianApp/plebeian-market-old/HEAD/web/backoffice/src/lib/images/space-cat-400x400.png -------------------------------------------------------------------------------- /web/backoffice/static/images/icons/favicon-16x16.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PlebeianApp/plebeian-market-old/HEAD/web/backoffice/static/images/icons/favicon-16x16.png -------------------------------------------------------------------------------- /web/backoffice/static/images/icons/favicon-32x32.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PlebeianApp/plebeian-market-old/HEAD/web/backoffice/static/images/icons/favicon-32x32.png -------------------------------------------------------------------------------- /web/backoffice/static/images/icons/mstile-150x150.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PlebeianApp/plebeian-market-old/HEAD/web/backoffice/static/images/icons/mstile-150x150.png -------------------------------------------------------------------------------- /web/frontoffice/src/lib/images/golden-gai-tokyo.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PlebeianApp/plebeian-market-old/HEAD/web/frontoffice/src/lib/images/golden-gai-tokyo.jpg -------------------------------------------------------------------------------- /web/frontoffice/static/images/icons/favicon-16x16.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PlebeianApp/plebeian-market-old/HEAD/web/frontoffice/static/images/icons/favicon-16x16.png -------------------------------------------------------------------------------- /web/frontoffice/static/images/icons/favicon-32x32.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PlebeianApp/plebeian-market-old/HEAD/web/frontoffice/static/images/icons/favicon-32x32.png -------------------------------------------------------------------------------- /scripts/staging.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | DIR="$(cd "$(dirname "$0")" && pwd)" 4 | 5 | $DIR/do.sh staging down --volumes && $DIR/do.sh staging build && $DIR/do.sh staging up -d 6 | -------------------------------------------------------------------------------- /web/backoffice/.env: -------------------------------------------------------------------------------- 1 | VITE_TWITTER_USER=@PlebeianMarket 2 | VITE_PM_DESCRIPTION="Self-sovereign marketplace built on Bitcoin and Lightning" 3 | VITE_SITE_NAME="Plebeian Market" 4 | -------------------------------------------------------------------------------- /web/backoffice/static/images/icons/apple-touch-icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PlebeianApp/plebeian-market-old/HEAD/web/backoffice/static/images/icons/apple-touch-icon.png -------------------------------------------------------------------------------- /web/frontoffice/postcss.config.cjs: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | plugins: { 3 | 'tailwindcss/nesting': {}, 4 | tailwindcss: {}, 5 | autoprefixer: {}, 6 | }, 7 | } 8 | -------------------------------------------------------------------------------- /web/frontoffice/static/images/icons/mstile-150x150.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PlebeianApp/plebeian-market-old/HEAD/web/frontoffice/static/images/icons/mstile-150x150.png -------------------------------------------------------------------------------- /web/backoffice/static/images/Plebeian_Logo_OpenGraph.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PlebeianApp/plebeian-market-old/HEAD/web/backoffice/static/images/Plebeian_Logo_OpenGraph.png -------------------------------------------------------------------------------- /web/frontoffice/static/images/Plebeian_Logo_OpenGraph.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PlebeianApp/plebeian-market-old/HEAD/web/frontoffice/static/images/Plebeian_Logo_OpenGraph.png -------------------------------------------------------------------------------- /web/frontoffice/static/images/icons/apple-touch-icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PlebeianApp/plebeian-market-old/HEAD/web/frontoffice/static/images/icons/apple-touch-icon.png -------------------------------------------------------------------------------- /api/extensions.py: -------------------------------------------------------------------------------- 1 | from flask_cors import CORS 2 | from flask_mail import Mail 3 | from flask_sqlalchemy import SQLAlchemy 4 | 5 | cors = CORS() 6 | db = SQLAlchemy() 7 | mail = Mail() 8 | -------------------------------------------------------------------------------- /web/backoffice/static/images/icons/android-chrome-96x96.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PlebeianApp/plebeian-market-old/HEAD/web/backoffice/static/images/icons/android-chrome-96x96.png -------------------------------------------------------------------------------- /web/backoffice/src/lib/images/Bitko-Illustration-Faketoshi.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PlebeianApp/plebeian-market-old/HEAD/web/backoffice/src/lib/images/Bitko-Illustration-Faketoshi.png -------------------------------------------------------------------------------- /web/backoffice/static/images/icons/android-chrome-192x192.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PlebeianApp/plebeian-market-old/HEAD/web/backoffice/static/images/icons/android-chrome-192x192.png -------------------------------------------------------------------------------- /web/backoffice/static/images/icons/android-chrome-512x512.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PlebeianApp/plebeian-market-old/HEAD/web/backoffice/static/images/icons/android-chrome-512x512.png -------------------------------------------------------------------------------- /web/frontoffice/static/images/icons/android-chrome-192x192.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PlebeianApp/plebeian-market-old/HEAD/web/frontoffice/static/images/icons/android-chrome-192x192.png -------------------------------------------------------------------------------- /web/frontoffice/static/images/icons/android-chrome-512x512.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PlebeianApp/plebeian-market-old/HEAD/web/frontoffice/static/images/icons/android-chrome-512x512.png -------------------------------------------------------------------------------- /web/shared/vite.config.ts: -------------------------------------------------------------------------------- 1 | import { sveltekit } from '@sveltejs/kit/vite'; 2 | import { defineConfig } from 'vite'; 3 | 4 | export default defineConfig({ 5 | plugins: [sveltekit()] 6 | }); 7 | -------------------------------------------------------------------------------- /web/backoffice/static/images/screenshots/screenshot_homepage.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PlebeianApp/plebeian-market-old/HEAD/web/backoffice/static/images/screenshots/screenshot_homepage.jpg -------------------------------------------------------------------------------- /web/frontoffice/static/images/screenshots/screenshot_homepage.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PlebeianApp/plebeian-market-old/HEAD/web/frontoffice/static/images/screenshots/screenshot_homepage.jpg -------------------------------------------------------------------------------- /web/frontoffice/.env.production: -------------------------------------------------------------------------------- 1 | VITE_BASE_URL=${WWW_BASE_URL}/ 2 | VITE_API_BASE_URL=${API_BASE_URL}/ 3 | VITE_NOSTR_PM_STALL_PUBLIC_KEY="28c62ad00fe085a7b2b54a05fdf333367e3e6a4d9650ad1c159f964705b76928" -------------------------------------------------------------------------------- /web/frontoffice/static/config-example.json: -------------------------------------------------------------------------------- 1 | { 2 | "admin_pubkeys": [ 3 | "" 4 | ], 5 | "homepage_banner_image": "", 6 | "backend_present": false, 7 | "market_square_channel_id": "" 8 | } 9 | -------------------------------------------------------------------------------- /web/backoffice/static/images/screenshots/screenshot_market_square.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PlebeianApp/plebeian-market-old/HEAD/web/backoffice/static/images/screenshots/screenshot_market_square.jpg -------------------------------------------------------------------------------- /web/frontoffice/static/images/screenshots/screenshot_market_square.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PlebeianApp/plebeian-market-old/HEAD/web/frontoffice/static/images/screenshots/screenshot_market_square.jpg -------------------------------------------------------------------------------- /web/frontoffice/src/lib/components/Notifications.svelte: -------------------------------------------------------------------------------- 1 | 4 | 5 | -------------------------------------------------------------------------------- /web/shared/.gitignore: -------------------------------------------------------------------------------- 1 | .DS_Store 2 | node_modules 3 | /build 4 | /dist 5 | /.svelte-kit 6 | /package 7 | .env 8 | .env.* 9 | !.env.example 10 | vite.config.js.timestamp-* 11 | vite.config.ts.timestamp-* 12 | -------------------------------------------------------------------------------- /web/backoffice/vite.config.js: -------------------------------------------------------------------------------- 1 | import { sveltekit } from '@sveltejs/kit/vite'; 2 | 3 | /** @type {import('vite').UserConfig} */ 4 | const config = { 5 | plugins: [sveltekit()] 6 | }; 7 | 8 | export default config; 9 | -------------------------------------------------------------------------------- /web/frontoffice/vite.config.js: -------------------------------------------------------------------------------- 1 | import { sveltekit } from '@sveltejs/kit/vite'; 2 | 3 | /** @type {import('vite').UserConfig} */ 4 | const config = { 5 | plugins: [sveltekit()] 6 | }; 7 | 8 | export default config; 9 | -------------------------------------------------------------------------------- /web/shared/src/lib/components/pagebuilder/lexical-editor/createEmptyRichText.ts: -------------------------------------------------------------------------------- 1 | import {$getRoot} from '@bowline/svelte-lexical'; 2 | 3 | export function createEmptyRichText() { 4 | const root = $getRoot(); 5 | } 6 | -------------------------------------------------------------------------------- /web/shared/.eslintignore: -------------------------------------------------------------------------------- 1 | .DS_Store 2 | node_modules 3 | /build 4 | /.svelte-kit 5 | /package 6 | .env 7 | .env.* 8 | !.env.example 9 | 10 | # Ignore files for PNPM, NPM and YARN 11 | pnpm-lock.yaml 12 | package-lock.json 13 | yarn.lock 14 | -------------------------------------------------------------------------------- /web/shared/src/lib/components/layout/Title-h1.svelte: -------------------------------------------------------------------------------- 1 | 4 |

5 | 6 |

7 | -------------------------------------------------------------------------------- /web/shared/src/lib/components/icons/X.svelte: -------------------------------------------------------------------------------- 1 | 2 | 3 | -------------------------------------------------------------------------------- /web/frontoffice/.env: -------------------------------------------------------------------------------- 1 | VITE_TWITTER_USER=@PlebeianMarket 2 | VITE_PM_DESCRIPTION="Self-sovereign marketplace built on Bitcoin and Lightning" 3 | VITE_SITE_NAME="Plebeian Market" 4 | VITE_NOSTR_PM_STALL_PUBLIC_KEY="76cc29acb8008c68b105cf655d34de0b1f7bc0215eaae6bbc83173d6d3f7b987" -------------------------------------------------------------------------------- /web/frontoffice/src/lib/stores.ts: -------------------------------------------------------------------------------- 1 | import { writable, type Writable } from 'svelte/store'; 2 | 3 | interface CategoriesInfo { 4 | amount: number, 5 | selected: boolean 6 | } 7 | 8 | export const productCategories: Writable = writable(null); 9 | -------------------------------------------------------------------------------- /web/shared/src/lib/components/icons/Search.svelte: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /web/shared/src/lib/components/icons/ArrowLeft.svelte: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /web/shared/src/lib/components/pagebuilder/SectionsImageBanner.svelte: -------------------------------------------------------------------------------- 1 | 4 | 5 | {#if section?.params?.imageBannerURL} 6 | Banner Section 7 | {/if} -------------------------------------------------------------------------------- /web/backoffice/src/lib/types/base.ts: -------------------------------------------------------------------------------- 1 | export interface IEntityBase { 2 | key: string; 3 | endpoint: string; 4 | } 5 | 6 | export interface IEntity extends IEntityBase { 7 | is_mine: boolean; 8 | 9 | validate: () => boolean; 10 | toJson: () => any; 11 | } 12 | -------------------------------------------------------------------------------- /web/shared/src/lib/components/icons/Clock.svelte: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /web/shared/src/lib/components/icons/Hamburger.svelte: -------------------------------------------------------------------------------- 1 | 2 | 3 | -------------------------------------------------------------------------------- /services/nginx/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM nginx:1.25-alpine-slim 2 | 3 | RUN mkdir /front-office-config && rm /etc/nginx/conf.d/default.conf 4 | COPY ./web/frontoffice/static/config-pm.json /front-office-config/config.json 5 | COPY ./services/nginx/nginx.conf /etc/nginx/conf.d/nginx.conf 6 | 7 | EXPOSE 80 8 | -------------------------------------------------------------------------------- /web/shared/src/lib/components/pagebuilder/lexical-editor/images/icons/plus.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /web/backoffice/tests/example.spec.ts: -------------------------------------------------------------------------------- 1 | import { test, expect } from "@playwright/test"; 2 | 3 | test("has title", async ({ page }) => { 4 | await page.goto("http://127.0.0.1:5173/"); 5 | 6 | // Expect a title "to contain" a substring. 7 | await expect(page).toHaveTitle(/Plebeian Market/); 8 | }); 9 | -------------------------------------------------------------------------------- /web/frontoffice/src/lib/components/nostr/ImagePreview.svelte: -------------------------------------------------------------------------------- 1 | 4 | 5 |
6 |
Embedded media
7 |
8 | -------------------------------------------------------------------------------- /web/shared/src/lib/components/pagebuilder/lexical-editor/images/icons/font-color.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /web/shared/src/lib/components/icons/DragBars.svelte: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /web/shared/src/lib/components/icons/Info.svelte: -------------------------------------------------------------------------------- 1 | 2 | 3 | -------------------------------------------------------------------------------- /web/backoffice/src/app.d.ts: -------------------------------------------------------------------------------- 1 | /// 2 | 3 | // See https://kit.svelte.dev/docs/types#app 4 | // for information about these interfaces 5 | declare namespace App { 6 | // interface Locals {} 7 | // interface Platform {} 8 | // interface Session {} 9 | // interface Stuff {} 10 | } 11 | -------------------------------------------------------------------------------- /web/frontoffice/src/app.d.ts: -------------------------------------------------------------------------------- 1 | /// 2 | 3 | // See https://kit.svelte.dev/docs/types#app 4 | // for information about these interfaces 5 | declare namespace App { 6 | // interface Locals {} 7 | // interface Platform {} 8 | // interface Session {} 9 | // interface Stuff {} 10 | } 11 | -------------------------------------------------------------------------------- /web/shared/src/lib/components/pagebuilder/lexical-editor/images/icons/lock-fill.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /web/shared/src/lib/components/pagebuilder/lexical-editor/images/icons/caret-right-fill.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /web/shared/src/lib/components/pagebuilder/lexical-editor/images/icons/success-alt.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /web/shared/src/lib/components/pagebuilder/lexical-editor/images/icons/success.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /web/shared/src/lib/components/icons/SendMessage.svelte: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /web/shared/src/lib/components/pagebuilder/lexical-editor/images/icons/type-h1.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /web/frontoffice/src/routes/product/[product_id]/+page.svelte: -------------------------------------------------------------------------------- 1 | 7 | 8 | {#key data.product_id} 9 | 10 | {/key} -------------------------------------------------------------------------------- /web/shared/src/lib/components/icons/AlertInfo.svelte: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | -------------------------------------------------------------------------------- /web/backoffice/static/images/icons/browserconfig.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | #2b5797 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /web/frontoffice/static/images/icons/browserconfig.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | #da532c 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /web/shared/src/lib/components/notifications/InfoBox.svelte: -------------------------------------------------------------------------------- 1 | 6 |
7 | 8 | 9 |
10 | -------------------------------------------------------------------------------- /web/shared/src/lib/components/pagebuilder/lexical-editor/images/icons/chevron-down.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /web/backoffice/static/.well-known/assetlinks.json: -------------------------------------------------------------------------------- 1 | [{ 2 | "relation": ["delegate_permission/common.handle_all_urls"], 3 | "target" : { "namespace": "android_app", "package_name": "market.plebeian.twa", 4 | "sha256_cert_fingerprints": ["EA:3A:75:40:07:31:E8:A9:D9:0C:D5:53:30:DB:43:DE:37:B8:31:B8:A9:4A:F0:AF:C3:9A:0C:41:91:62:2A:E8"] } 5 | } 6 | ] 7 | -------------------------------------------------------------------------------- /web/frontoffice/src/routes/faq/+page.svelte: -------------------------------------------------------------------------------- 1 | 5 | 6 | 7 | FAQ 8 | 9 | 10 | FAQ 11 | 12 | 13 | -------------------------------------------------------------------------------- /web/frontoffice/static/.well-known/assetlinks.json: -------------------------------------------------------------------------------- 1 | [{ 2 | "relation": ["delegate_permission/common.handle_all_urls"], 3 | "target" : { "namespace": "android_app", "package_name": "market.plebeian.twa", 4 | "sha256_cert_fingerprints": ["EA:3A:75:40:07:31:E8:A9:D9:0C:D5:53:30:DB:43:DE:37:B8:31:B8:A9:4A:F0:AF:C3:9A:0C:41:91:62:2A:E8"] } 5 | } 6 | ] 7 | -------------------------------------------------------------------------------- /web/shared/src/lib/components/icons/Minus.svelte: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /web/shared/src/lib/components/icons/Contract.svelte: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /web/shared/src/lib/components/icons/Home.svelte: -------------------------------------------------------------------------------- 1 | 2 | 3 | -------------------------------------------------------------------------------- /web/shared/src/lib/components/icons/Exit.svelte: -------------------------------------------------------------------------------- 1 | 2 | 3 | -------------------------------------------------------------------------------- /web/shared/src/lib/components/pagebuilder/lexical-editor/images/icons/type-h4.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /web/shared/src/lib/components/icons/User.svelte: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /web/shared/src/lib/components/pagebuilder/lexical-editor/images/icons/lock.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /web/shared/src/lib/components/icons/Expand.svelte: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /web/shared/src/lib/components/pagebuilder/lexical-editor/images/icons/type-underline.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /web/frontoffice/src/routes/stalls/+page.svelte: -------------------------------------------------------------------------------- 1 | 5 | 6 | 7 | Stall Browser 8 | 9 | 10 | Stall Browser 11 | 12 | 13 | -------------------------------------------------------------------------------- /web/shared/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "./.svelte-kit/tsconfig.json", 3 | "compilerOptions": { 4 | "allowJs": true, 5 | "checkJs": true, 6 | "esModuleInterop": true, 7 | "forceConsistentCasingInFileNames": true, 8 | "resolveJsonModule": true, 9 | "skipLibCheck": true, 10 | "sourceMap": true, 11 | "strict": true, 12 | "moduleResolution": "NodeNext" 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /web/shared/src/lib/components/icons/Plus.svelte: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /web/shared/src/lib/components/pagebuilder/lexical-editor/images/icons/chat-right.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /ln_payments_processor/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM python:3.12-slim-bullseye 2 | 3 | COPY ./ln_payments_processor/requirements.txt / 4 | 5 | RUN apt-get update \ 6 | && apt-get install -y curl git libpq-dev pkg-config cmake python3-magic \ 7 | && pip3 install -r /requirements.txt 8 | 9 | COPY ./ln_payments_processor /app 10 | 11 | WORKDIR /app 12 | 13 | ENV PYTHONPATH /app 14 | ENV PYTHONUNBUFFERED 1 15 | -------------------------------------------------------------------------------- /web/frontoffice/src/routes/cart/+page.svelte: -------------------------------------------------------------------------------- 1 | 5 | 6 | 7 | Shopping Cart 8 | 9 | 10 | Shopping Cart 11 | 12 | 13 | -------------------------------------------------------------------------------- /web/shared/src/lib/components/pagebuilder/lexical-editor/images/icons/type-italic.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /web/shared/src/lib/components/pagebuilder/lexical-editor/images/icons/arrow-clockwise.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /web/shared/src/lib/components/pagebuilder/lexical-editor/images/icons/code.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /web/shared/src/lib/components/pagebuilder/lexical-editor/images/icons/font-family.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /web/shared/src/lib/components/pagebuilder/lexical-editor/themes/CommentEditorTheme.css: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright (c) Meta Platforms, Inc. and affiliates. 3 | * 4 | * This source code is licensed under the MIT license found in the 5 | * LICENSE file in the root directory of this source tree. 6 | * 7 | * 8 | */ 9 | 10 | .CommentEditorTheme__paragraph { 11 | margin: 0; 12 | position: 'relative'; 13 | } 14 | -------------------------------------------------------------------------------- /web/shared/src/lib/components/pagebuilder/lexical-editor/themes/StickyEditorTheme.css: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright (c) Meta Platforms, Inc. and affiliates. 3 | * 4 | * This source code is licensed under the MIT license found in the 5 | * LICENSE file in the root directory of this source tree. 6 | * 7 | * 8 | */ 9 | 10 | .StickyEditorTheme__paragraph { 11 | margin: 0; 12 | position: 'relative'; 13 | } 14 | -------------------------------------------------------------------------------- /web/shared/src/lib/components/pagebuilder/lexical-editor/images/icons/arrow-counterclockwise.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /web/shared/src/lib/components/pagebuilder/lexical-editor/images/icons/table.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /api/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM python:3.12-slim-bullseye 2 | 3 | COPY ./api/requirements.txt / 4 | 5 | RUN apt-get update \ 6 | && apt-get install -y curl git libpq-dev pkg-config gcc cmake python3-magic \ 7 | && pip3 install -r /requirements.txt 8 | 9 | COPY ./api /app 10 | 11 | WORKDIR /app 12 | 13 | ENV PYTHONPATH /app 14 | ENV PYTHONUNBUFFERED 1 15 | 16 | ARG RELEASE_VERSION 17 | ENV RELEASE_VERSION $RELEASE_VERSION 18 | -------------------------------------------------------------------------------- /web/shared/src/lib/components/pagebuilder/lexical-editor/images/icons/draggable-block-menu.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /web/shared/src/lib/components/pagebuilder/lexical-editor/images/icons/horizontal-rule.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /web/shared/src/lib/components/pagebuilder/lexical-editor/images/icons/send.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /api/requirements.txt: -------------------------------------------------------------------------------- 1 | base58 2 | bip39gen 3 | bleach 4 | btc2fiat 5 | boto3 6 | ecdsa 7 | email-validator 8 | flask 9 | flask-cors 10 | flask-mail 11 | flask-migrate 12 | flask-sqlalchemy 13 | gunicorn 14 | lnurl 15 | git+https://github.com/jeffthibault/python-nostr.git#egg=nostr 16 | psycopg2 17 | pycoin 18 | pydantic==1.10.4 19 | pyjwt 20 | pyqrcode 21 | python-dateutil 22 | python-magic 23 | requests 24 | secp256k1 25 | semver -------------------------------------------------------------------------------- /web/shared/src/lib/components/icons/Substack.svelte: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /web/shared/src/lib/components/icons/Moon.svelte: -------------------------------------------------------------------------------- 1 | 2 | 3 | -------------------------------------------------------------------------------- /web/shared/src/lib/components/icons/Settings.svelte: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /web/shared/src/lib/images/badge_placeholder.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | -------------------------------------------------------------------------------- /services/postgres/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM postgres:14-bullseye 2 | 3 | # TODO: ideally we don't hardcode these here, 4 | # but for now this works fine as these values are only used when creating a new database, 5 | # which only happens for dev & test (which have the same values hardcoded) 6 | # for production, the values are read from "/secrets/db.json" 7 | ENV POSTGRES_DB market 8 | ENV POSTGRES_USER pleb 9 | ENV POSTGRES_PASSWORD plebpass 10 | -------------------------------------------------------------------------------- /web/shared/src/lib/components/pagebuilder/lexical-editor/images/icons/file-image.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /web/shared/src/lib/components/pagebuilder/lexical-editor/images/icons/plus-slash-minus.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /ln_payments_processor/requirements.txt: -------------------------------------------------------------------------------- 1 | base58 2 | bip39gen 3 | bleach 4 | btc2fiat 5 | boto3 6 | ecdsa 7 | email-validator 8 | flask 9 | flask-cors 10 | flask-mail 11 | flask-migrate 12 | flask-sqlalchemy 13 | gunicorn 14 | lnurl 15 | git+https://github.com/jeffthibault/python-nostr.git#egg=nostr 16 | psycopg2 17 | pycoin 18 | pydantic==1.10.4 19 | pyjwt 20 | pyqrcode 21 | python-dateutil 22 | python-magic 23 | requests 24 | secp256k1 25 | semver -------------------------------------------------------------------------------- /web/shared/src/lib/components/icons/WinnerBadge.svelte: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /web/shared/src/lib/components/pagebuilder/lexical-editor/images/icons/link.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /web/shared/src/lib/components/pagebuilder/lexical-editor/images/icons/mic.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /web/backoffice/src/lib/components/RelayRow.svelte: -------------------------------------------------------------------------------- 1 | 10 | 11 | 12 | 13 | {relay.url} 14 | 15 | 16 | -------------------------------------------------------------------------------- /web/shared/src/lib/components/icons/Key.svelte: -------------------------------------------------------------------------------- 1 | 2 | 3 | -------------------------------------------------------------------------------- /web/shared/src/lib/components/icons/Book.svelte: -------------------------------------------------------------------------------- 1 | 2 | 3 | -------------------------------------------------------------------------------- /web/shared/src/lib/components/pagebuilder/lexical-editor/images/icons/justify.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /web/shared/src/lib/components/pagebuilder/lexical-editor/images/icons/text-left.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /web/backoffice/src/lib/components/notifications/WarningBox.svelte: -------------------------------------------------------------------------------- 1 |
2 | 3 | 4 |
5 | -------------------------------------------------------------------------------- /web/shared/src/lib/components/pagebuilder/lexical-editor/images/icons/text-center.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /web/shared/src/lib/components/pagebuilder/lexical-editor/images/icons/text-right.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /web/shared/src/lib/components/pagebuilder/lexical-editor/images/icons/upload.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /web/shared/src/lib/components/pagebuilder/lexical-editor/images/icons/download.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /web/shared/src/lib/components/pagebuilder/lexical-editor/images/icons/text-paragraph.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /web/frontoffice/src/lib/components/nostr/types.ts: -------------------------------------------------------------------------------- 1 | import type { Event } from 'nostr-tools'; 2 | import type { UserMetadata } from "$sharedLib/services/nostr"; 3 | 4 | export type VitaminedMessage = Event & { 5 | reactions?: Map>, 6 | samePubKey?: boolean, 7 | profile?: UserMetadata, 8 | nip05VerifiedAddress?: string, 9 | repliedToMessage?: VitaminedMessage, 10 | replies?: string[]; 11 | imagePreviewUrl?: string, 12 | }; 13 | -------------------------------------------------------------------------------- /web/shared/src/lib/components/icons/Edit.svelte: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /web/shared/src/lib/components/icons/Email.svelte: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /web/shared/src/lib/components/pagebuilder/lexical-editor/images/icons/copy.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /web/shared/src/lib/components/pagebuilder/lexical-editor/images/icons/sticky.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /.env.prod: -------------------------------------------------------------------------------- 1 | ENV=prod 2 | FLASK_APP=main 3 | LOG_LEVEL=INFO 4 | USE_S3=1 5 | BIRDWATCHER_BASE_URL=http://birdwatcher:6000 6 | LNDHUB_URL=https://ln.getalby.com 7 | LOG_FILENAME=/state/pm.log 8 | PROCESSED_EVENT_IDS_FILENAME=/state/processed_event_ids.txt 9 | VERIFIED_EXTERNAL_IDENTITIES_FILENAME=/state/verified_external_identities.txt 10 | GECKODRIVER_BINARY=/app/geckodriver 11 | DOMAIN_NAME=plebeian.market 12 | WWW_BASE_URL=https://plebeian.market 13 | API_BASE_URL=https://plebeian.market -------------------------------------------------------------------------------- /web/backoffice/svelte.config.js: -------------------------------------------------------------------------------- 1 | import adapter from '@sveltejs/adapter-node'; 2 | import { vitePreprocess } from '@sveltejs/vite-plugin-svelte'; 3 | 4 | /** @type {import('@sveltejs/kit').Config} */ 5 | const config = { 6 | kit: { 7 | adapter: adapter({ 8 | out: 'build' 9 | }), 10 | alias: { 11 | '$sharedLib': '../shared/src/lib', 12 | }, 13 | paths: { 14 | base: '/admin' 15 | } 16 | }, 17 | preprocess: vitePreprocess() 18 | }; 19 | 20 | export default config; 21 | -------------------------------------------------------------------------------- /web/shared/src/lib/components/icons/Back.svelte: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /web/shared/src/lib/components/pagebuilder/lexical-editor/images/icons/list-ul.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /web/shared/src/lib/components/icons/Support.svelte: -------------------------------------------------------------------------------- 1 | 2 | 3 | -------------------------------------------------------------------------------- /web/shared/src/lib/components/icons/Share.svelte: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /web/shared/src/lib/components/icons/ShoppingCart.svelte: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /.env.staging: -------------------------------------------------------------------------------- 1 | ENV=staging 2 | FLASK_APP=main 3 | LOG_LEVEL=INFO 4 | LOG_FILENAME=/state/pm.log 5 | WWW_BASE_URL=https://staging.plebeian.market 6 | API_BASE_URL=https://staging.plebeian.market 7 | BIRDWATCHER_BASE_URL=http://birdwatcher:6000 8 | PROCESSED_EVENT_IDS_FILENAME=/state/processed_event_ids.txt 9 | VERIFIED_EXTERNAL_IDENTITIES_FILENAME=/state/verified_external_identities.txt 10 | GECKODRIVER_BINARY=/app/geckodriver 11 | LNDHUB_URL=https://ln.getalby.com 12 | DOMAIN_NAME=staging.plebeian.market 13 | -------------------------------------------------------------------------------- /web/backoffice/jsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "./.svelte-kit/tsconfig.json", 3 | "compilerOptions": { 4 | "allowJs": true, 5 | "checkJs": true, 6 | "esModuleInterop": true, 7 | "forceConsistentCasingInFileNames": true, 8 | "lib": ["es2020", "DOM"], 9 | "moduleResolution": "bundler", 10 | "module": "es2020", 11 | "resolveJsonModule": true, 12 | "skipLibCheck": true, 13 | "sourceMap": true, 14 | "strict": true, 15 | "target": "es2020", 16 | "noImplicitAny": false 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /web/frontoffice/jsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "./.svelte-kit/tsconfig.json", 3 | "compilerOptions": { 4 | "allowJs": true, 5 | "checkJs": true, 6 | "esModuleInterop": true, 7 | "forceConsistentCasingInFileNames": true, 8 | "lib": ["es2020", "DOM"], 9 | "moduleResolution": "node", 10 | "module": "es2020", 11 | "resolveJsonModule": true, 12 | "skipLibCheck": true, 13 | "sourceMap": true, 14 | "strict": true, 15 | "target": "es2020", 16 | "noImplicitAny": false 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /web/shared/src/lib/components/pagebuilder/lexical-editor/images/icons/square-check.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /.env.test: -------------------------------------------------------------------------------- 1 | ENV=test 2 | FLASK_APP=main 3 | LOG_LEVEL=DEBUG 4 | FLASK_DEBUG=1 5 | DEBUG=1 6 | MOCK_BTC=1 7 | MOCK_LNDHUB=1 8 | MOCK_S3=1 9 | MOCK_MAIL=1 10 | MOCK_NOSTR=1 11 | DB_USERNAME=pleb 12 | DB_PASSWORD=plebpass 13 | SQLALCHEMY_DISABLE_POOLING=1 14 | BID_LAST_MINUTE_EXTEND=0 15 | WWW_BASE_URL=https://plebeian.market 16 | API_BASE_URL=http://api:5000 17 | API_BASE_URL_EXTERNAL=http://localhost:5000 18 | BIRDWATCHER_BASE_URL=http://birdwatcher:6000 19 | PROCESSED_EVENT_IDS_FILENAME=processed_event_ids.txt 20 | -------------------------------------------------------------------------------- /.env.dev: -------------------------------------------------------------------------------- 1 | ENV=dev 2 | FLASK_APP=main 3 | LOG_LEVEL=DEBUG 4 | FLASK_DEBUG=1 5 | DEBUG=1 6 | MOCK_BTC=1 7 | MOCK_LNDHUB=1 8 | MOCK_S3=1 9 | MOCK_MAIL=1 10 | MOCK_NOSTR=1 11 | DB_USERNAME=pleb 12 | DB_PASSWORD=plebpass 13 | SQLALCHEMY_DISABLE_POOLING=1 14 | WWW_BASE_URL=http://localhost:5173 15 | API_BASE_URL=http://api:5000 16 | API_BASE_URL_EXTERNAL=http://localhost:5000 17 | BIRDWATCHER_BASE_URL=http://birdwatcher:6000 18 | PROCESSED_EVENT_IDS_FILENAME=processed_event_ids.txt 19 | LNDHUB_URL=https://ln.getalby.com 20 | -------------------------------------------------------------------------------- /web/frontoffice/src/routes/nostr/+page.svelte: -------------------------------------------------------------------------------- 1 | 5 | 6 | 7 | Nostr Information 8 | 9 | 10 | Nostr Information 11 | 12 |
13 |
14 | 15 |
16 |
17 | -------------------------------------------------------------------------------- /web/shared/src/lib/components/pagebuilder/lexical-editor/images/icons/chat-right-dots.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /web/shared/src/lib/components/pagebuilder/lexical-editor/images/icons/type-bold.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /web/backoffice/src/lib/stores.ts: -------------------------------------------------------------------------------- 1 | import { writable, type Writable } from 'svelte/store'; 2 | import type { User } from "$lib/types/user"; 3 | 4 | export const user: Writable = writable(null); 5 | 6 | export enum AuthBehavior { 7 | Login = "login", 8 | } 9 | 10 | export type AuthCallback = () => void; 11 | 12 | export type AuthOptions = { 13 | default?: AuthBehavior, 14 | cb?: AuthCallback, 15 | } 16 | 17 | export const AuthRequired: Writable = writable(false); 18 | -------------------------------------------------------------------------------- /web/shared/src/lib/components/icons/Copy.svelte: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /web/shared/src/lib/components/icons/Eye.svelte: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /web/shared/src/lib/components/pagebuilder/lexical-editor/images/icons/type-h2.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /web/shared/src/lib/components/pagebuilder/lexical-editor/images/icons/clipboard.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /web/shared/src/lib/components/pagebuilder/lexical-editor/images/icons/outdent.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /web/frontoffice/src/lib/images/product_image_fallback.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /web/shared/src/lib/components/pagebuilder/lexical-editor/ui/Switch.svelte: -------------------------------------------------------------------------------- 1 | 8 | 9 |
10 | 11 | 18 |
19 | -------------------------------------------------------------------------------- /web/shared/src/lib/components/pagebuilder/lexical-editor/images/icons/indent.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /web/frontoffice/static/images/icons/site.webmanifest: -------------------------------------------------------------------------------- 1 | { 2 | "name": "", 3 | "short_name": "", 4 | "icons": [ 5 | { 6 | "src": "/android-chrome-192x192.png", 7 | "sizes": "192x192", 8 | "type": "image/png" 9 | }, 10 | { 11 | "src": "/android-chrome-512x512.png", 12 | "sizes": "512x512", 13 | "type": "image/png" 14 | } 15 | ], 16 | "theme_color": "#ffffff", 17 | "background_color": "#ffffff", 18 | "display": "standalone" 19 | } 20 | -------------------------------------------------------------------------------- /web/shared/src/lib/components/pagebuilder/lexical-editor/images/icons/file-earmark-text.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /web/shared/src/lib/components/icons/Eye-slash.svelte: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /web/shared/src/lib/components/icons/Phone.svelte: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /web/backoffice/.eslintrc.cjs: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | root: true, 3 | extends: ['eslint:recommended'], 4 | parser: '@typescript-eslint/parser', 5 | plugins: ['@typescript-eslint'], 6 | parserOptions: { 7 | sourceType: 'module', 8 | ecmaVersion: 2020, 9 | extraFileExtensions: ['.svelte'] 10 | }, 11 | env: { 12 | browser: true, 13 | es2017: true, 14 | node: true 15 | }, 16 | overrides: [ 17 | { 18 | files: ['*.svelte'], 19 | parser: 'svelte-eslint-parser', 20 | parserOptions: { 21 | parser: '@typescript-eslint/parser' 22 | } 23 | } 24 | ] 25 | }; 26 | -------------------------------------------------------------------------------- /web/backoffice/tailwind.config.cjs: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | content: [ 3 | "./src/lib/components/**/*.svelte", 4 | "./src/routes/**/*.svelte", 5 | "./../shared/src/lib/components/**/*.svelte" 6 | ], 7 | theme: { 8 | extend: { 9 | colors: { 10 | "neon-pink": "#ff00ff", 11 | }, 12 | screens: { 13 | '3xl': '1800px', 14 | }, 15 | }, 16 | }, 17 | plugins: [require("daisyui")], 18 | daisyui: { 19 | themes: ["light", "dark"], 20 | darkTheme: "dark", 21 | }, 22 | darkMode: ['class', '[data-theme="dark"]'], 23 | }; 24 | -------------------------------------------------------------------------------- /web/shared/src/lib/components/pagebuilder/lexical-editor/images/icons/chat-left-text.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /web/backoffice/src/lib/components/MonthPicker.svelte: -------------------------------------------------------------------------------- 1 | 9 | 10 | -------------------------------------------------------------------------------- /web/shared/src/lib/components/pagebuilder/lexical-editor/images/icons/chat-right-text.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /web/frontoffice/src/lib/components/MonthPicker.svelte: -------------------------------------------------------------------------------- 1 | 9 | 10 | 16 | -------------------------------------------------------------------------------- /web/shared/src/lib/components/pagebuilder/lexical-editor/images/icons/user.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /web/shared/src/lib/components/pagebuilder/lexical-editor/images/icons/trash.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /web/backoffice/src/routes/+layout.js: -------------------------------------------------------------------------------- 1 | import {getConfigurationFromFile} from "$sharedLib/utils"; 2 | import {fileConfiguration} from "$sharedLib/stores"; 3 | import { browser } from "$app/environment"; 4 | 5 | // Load configuration from file before 6 | // any other component code runs 7 | async function loadConfig() { 8 | let config = await getConfigurationFromFile() ?? {}; 9 | config.backend_present = true; 10 | fileConfiguration.set(config); 11 | } 12 | 13 | if (browser) { 14 | loadConfig() 15 | .catch(error => console.log('Error while trying to load config from file:', error)); 16 | } 17 | -------------------------------------------------------------------------------- /web/shared/src/lib/components/pagebuilder/lexical-editor/themes/StickyEditorTheme.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright (c) Syed Umar Anis 3 | * 4 | * This source code is licensed under the MIT license found in the 5 | * LICENSE file in the root directory of this source tree. 6 | * 7 | */ 8 | 9 | import type {EditorThemeClasses} from '@bowline/svelte-lexical'; 10 | 11 | import './StickyEditorTheme.css'; 12 | 13 | import baseTheme from './PlaygroundEditorTheme'; 14 | 15 | const theme: EditorThemeClasses = { 16 | ...baseTheme, 17 | paragraph: 'StickyEditorTheme__paragraph', 18 | }; 19 | 20 | export default theme; 21 | -------------------------------------------------------------------------------- /web/frontoffice/static/config-pm.json: -------------------------------------------------------------------------------- 1 | { 2 | "admin_pubkeys": [ 3 | "ec79b568bdea63ca6091f5b84b0c639c10a0919e175fa09a4de3154f82906f25", 4 | "3e6d6eea7129430b4852e418de4319dd3052b72e42a0ecc79a3b1b8c9558d991", 5 | "c47c24c8f4000a83f5efcd2f7eadaeafb8f95437027df3354fd1c01d7f852583", 6 | "f982dbf2a0a4a484c98c5cbb8b83a1ecaf6589cb2652e19381158b5646fe23d6", 7 | "03b5036dc3db82604307c1964d2b926417a91c3b11ef75ba6ca55019e9b7a62a" 8 | ], 9 | "homepage_banner_image": "", 10 | "backend_present": true, 11 | "market_square_channel_id": "dd7aee9576b3d85287c37808cec29260d1a97e83bee4f15153d52851ff7db719" 12 | } 13 | -------------------------------------------------------------------------------- /api/migrations/script.py.mako: -------------------------------------------------------------------------------- 1 | """${message} 2 | 3 | Revision ID: ${up_revision} 4 | Revises: ${down_revision | comma,n} 5 | Create Date: ${create_date} 6 | 7 | """ 8 | from alembic import op 9 | import sqlalchemy as sa 10 | ${imports if imports else ""} 11 | 12 | # revision identifiers, used by Alembic. 13 | revision = ${repr(up_revision)} 14 | down_revision = ${repr(down_revision)} 15 | branch_labels = ${repr(branch_labels)} 16 | depends_on = ${repr(depends_on)} 17 | 18 | 19 | def upgrade(): 20 | ${upgrades if upgrades else "pass"} 21 | 22 | 23 | def downgrade(): 24 | ${downgrades if downgrades else "pass"} 25 | -------------------------------------------------------------------------------- /web/shared/src/lib/components/pagebuilder/lexical-editor/images/icons/type-strikethrough.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /web/shared/src/lib/components/icons/Trash.svelte: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /web/shared/src/lib/components/pagebuilder/lexical-editor/images/icons/pencil-fill.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /docker-compose.test.yml: -------------------------------------------------------------------------------- 1 | version: '3.6' 2 | 3 | services: 4 | api: 5 | env_file: .env.test 6 | environment: 7 | - AUTO_CONFIGURE_SITE=1 8 | finalize-auctions: 9 | env_file: .env.test 10 | settle-btc-payments: 11 | env_file: .env.test 12 | settle-lightning-payments: 13 | env_file: .env.test 14 | birdwatcher: 15 | env_file: .env.test 16 | test: 17 | image: plebeianmarket-api 18 | depends_on: 19 | api: 20 | condition: service_healthy 21 | env_file: .env.test 22 | volumes: 23 | - "./api:/app" 24 | networks: 25 | - proxy 26 | command: flask run-tests 27 | -------------------------------------------------------------------------------- /web/shared/src/lib/components/pagebuilder/lexical-editor/themes/CommentEditorTheme.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright (c) Meta Platforms, Inc. and affiliates. 3 | * 4 | * This source code is licensed under the MIT license found in the 5 | * LICENSE file in the root directory of this source tree. 6 | * 7 | */ 8 | 9 | import type {EditorThemeClasses} from '@bowline/svelte-lexical'; 10 | 11 | import './CommentEditorTheme.css'; 12 | 13 | import baseTheme from './PlaygroundEditorTheme'; 14 | 15 | const theme: EditorThemeClasses = { 16 | ...baseTheme, 17 | paragraph: 'CommentEditorTheme__paragraph', 18 | }; 19 | 20 | export default theme; 21 | -------------------------------------------------------------------------------- /web/shared/src/lib/components/icons/Question.svelte: -------------------------------------------------------------------------------- 1 | 2 | 3 | -------------------------------------------------------------------------------- /web/shared/src/lib/components/icons/Twitter.svelte: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /web/backoffice/src/lib/components/QR.svelte: -------------------------------------------------------------------------------- 1 | 12 | 13 | 14 |
15 | 16 | 17 |
-------------------------------------------------------------------------------- /scripts/do.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | USAGE="$0 (test|dev|staging|prod) ..." 4 | 5 | ENV=$1 6 | shift 7 | 8 | if [ "$ENV" = "test" ]; then 9 | docker compose -f docker-compose.yml -f docker-compose.dev.yml -f docker-compose.test.yml $@ 10 | elif [ "$ENV" = "dev" ]; then 11 | docker compose -f docker-compose.yml -f docker-compose.dev.yml $@ 12 | elif [ "$ENV" = "staging" ]; then 13 | docker compose -f docker-compose.yml -f docker-compose.staging.yml $@ 14 | elif [ "$ENV" = "prod" ]; then 15 | docker compose -f docker-compose.yml -f docker-compose.staging.yml -f docker-compose.prod.yml $@ 16 | else 17 | echo $USAGE 18 | exit 1 19 | fi 20 | -------------------------------------------------------------------------------- /web/shared/src/lib/components/pagebuilder/lexical-editor/images/icons/plug-fill.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /web/shared/src/lib/components/pagebuilder/lexical-editor/images/icons/type-h5.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /web/shared/src/lib/components/pagebuilder/lexical-editor/images/icons/camera.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /web/shared/src/lib/components/pagebuilder/lexical-editor/images/icons/close.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /web/shared/src/lib/components/pagebuilder/lexical-editor/images/icons/tweet.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /web/shared/.eslintrc.cjs: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | root: true, 3 | extends: [ 4 | 'eslint:recommended', 5 | 'plugin:@typescript-eslint/recommended', 6 | 'plugin:svelte/recommended' 7 | ], 8 | parser: '@typescript-eslint/parser', 9 | plugins: ['@typescript-eslint'], 10 | parserOptions: { 11 | sourceType: 'module', 12 | ecmaVersion: 2020, 13 | extraFileExtensions: ['.svelte'] 14 | }, 15 | env: { 16 | browser: true, 17 | es2017: true, 18 | node: true 19 | }, 20 | overrides: [ 21 | { 22 | files: ['*.svelte'], 23 | parser: 'svelte-eslint-parser', 24 | parserOptions: { 25 | parser: '@typescript-eslint/parser' 26 | } 27 | } 28 | ] 29 | }; 30 | -------------------------------------------------------------------------------- /web/shared/src/lib/components/pagebuilder/lexical-editor/images/icons/type-h3.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /web/shared/src/lib/components/icons/World.svelte: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /web/shared/src/lib/components/pagebuilder/lexical-editor/images/icons/bg-color.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /web/shared/src/lib/components/pagebuilder/lexical-editor/images/icons/markdown.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /web/frontoffice/.eslintrc.cjs: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | root: true, 3 | extends: [ 4 | 'eslint:recommended', 5 | 'plugin:@typescript-eslint/recommended', 6 | 'plugin:svelte/recommended', 7 | 'prettier' 8 | ], 9 | parser: '@typescript-eslint/parser', 10 | plugins: ['@typescript-eslint'], 11 | parserOptions: { 12 | sourceType: 'module', 13 | ecmaVersion: 2020, 14 | extraFileExtensions: ['.svelte'] 15 | }, 16 | env: { 17 | browser: true, 18 | es2017: true, 19 | node: true 20 | }, 21 | overrides: [ 22 | { 23 | files: ['*.svelte'], 24 | parser: 'svelte-eslint-parser', 25 | parserOptions: { 26 | parser: '@typescript-eslint/parser' 27 | } 28 | } 29 | ] 30 | }; 31 | -------------------------------------------------------------------------------- /web/frontoffice/src/app.css: -------------------------------------------------------------------------------- 1 | @tailwind base; 2 | @tailwind components; 3 | @tailwind utilities; 4 | 5 | body { 6 | overflow-x: hidden; 7 | scroll-behavior: smooth; 8 | } 9 | 10 | .qr { 11 | max-width: 320px; 12 | margin: auto; 13 | background-color: #eee; 14 | } 15 | 16 | /* Chrome, Safari, Edge, Opera */ 17 | input::-webkit-outer-spin-button, 18 | input::-webkit-inner-spin-button { 19 | -webkit-appearance: none; 20 | margin: 0; 21 | } 22 | 23 | /* Firefox */ 24 | input[type="number"] { 25 | -moz-appearance: textfield; 26 | } 27 | 28 | .blink { 29 | animation: blinker 0.6s linear infinite; 30 | } 31 | 32 | @keyframes blinker { 33 | 50% { 34 | opacity: 0; 35 | } 36 | } 37 | -------------------------------------------------------------------------------- /web/shared/src/lib/components/pagebuilder/lexical-editor/images/icons/plug.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /web/shared/src/lib/components/icons/Cash.svelte: -------------------------------------------------------------------------------- 1 | 2 | 3 | -------------------------------------------------------------------------------- /web/shared/src/lib/components/icons/ViewCards.svelte: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /web/shared/src/lib/components/icons/Chat.svelte: -------------------------------------------------------------------------------- 1 | 2 | 3 | -------------------------------------------------------------------------------- /web/shared/src/lib/components/icons/Github.svelte: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /web/shared/src/lib/components/icons/Tools.svelte: -------------------------------------------------------------------------------- 1 | 2 | 3 | -------------------------------------------------------------------------------- /web/frontoffice/src/lib/components/nostr/SimpleNote.svelte: -------------------------------------------------------------------------------- 1 | 6 | 7 |
8 |
9 | {@html message.message} 10 |
{formatTimestamp(message.created_at)}
11 |
12 |
13 | -------------------------------------------------------------------------------- /web/frontoffice/src/routes/planet/+page.svelte: -------------------------------------------------------------------------------- 1 | 2 | Plebeian Market 3 | 4 | 5 | 11 | 12 | Plebeian Planet 13 | 14 |
15 |

Products created on {import.meta.env.VITE_SITE_NAME}

16 |
17 | 18 | 19 | -------------------------------------------------------------------------------- /web/shared/src/lib/components/icons/Identities.svelte: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /web/shared/src/lib/components/icons/Store.svelte: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /web/shared/src/lib/components/pagebuilder/lexical-editor/images/icons/comments.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /web/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM node:18-alpine AS builder 2 | 3 | ARG BUILD_MODE 4 | 5 | COPY ./web /web 6 | 7 | COPY ./install.sh /web/frontoffice/static/ 8 | 9 | RUN cd /web/shared \ 10 | && npm install 11 | 12 | RUN cd /web/frontoffice \ 13 | && npm install \ 14 | && npm run build$BUILD_MODE 15 | 16 | RUN cd /web/backoffice \ 17 | && npm install \ 18 | && npm run build$BUILD_MODE 19 | 20 | FROM node:18-alpine 21 | 22 | WORKDIR /front-office-app 23 | COPY --from=builder /web/frontoffice/build . 24 | 25 | WORKDIR /app 26 | COPY --from=builder /web/backoffice/build . 27 | COPY --from=builder /web/backoffice/package.json . 28 | COPY --from=builder /web/backoffice/node_modules ./node_modules 29 | 30 | EXPOSE 3000 31 | CMD ["node", "index.js"] 32 | -------------------------------------------------------------------------------- /web/frontoffice/src/routes/marketsquare/+page.svelte: -------------------------------------------------------------------------------- 1 | 13 | 14 | 15 | Market Square 16 | 17 | 18 | Market Square 19 | 20 | {#if nostrRoomId !== null} 21 | 22 | {/if} -------------------------------------------------------------------------------- /web/frontoffice/src/routes/+layout.js: -------------------------------------------------------------------------------- 1 | import {getConfigurationFromFile} from "$sharedLib/utils"; 2 | import {fileConfiguration} from "$sharedLib/stores"; 3 | import { browser } from "$app/environment"; 4 | 5 | export const prerender = true; 6 | 7 | // Load configuration from file before 8 | // any other component code runs 9 | async function loadConfig() { 10 | let config = await getConfigurationFromFile() ?? {}; 11 | if (!Object.prototype.hasOwnProperty.call(config, 'backend_present')) { 12 | config.backend_present = true; 13 | } 14 | fileConfiguration.set(config); 15 | } 16 | 17 | if (browser) { 18 | loadConfig() 19 | .catch(error => console.log('Error while trying to load config from file:', error)); 20 | } 21 | -------------------------------------------------------------------------------- /web/shared/src/lib/components/icons/VerificationMark.svelte: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /web/backoffice/src/lib/components/Confirmation.svelte: -------------------------------------------------------------------------------- 1 | 13 | 14 | 20 | 21 | 22 | -------------------------------------------------------------------------------- /web/backoffice/src/lib/types/relay.ts: -------------------------------------------------------------------------------- 1 | import type { IEntity } from "$lib/types/base"; 2 | 3 | export class Relay implements IEntity { 4 | url: string; 5 | 6 | key: string; 7 | endpoint = "relays"; 8 | is_mine = false; 9 | 10 | constructor(url: string) { 11 | this.url = url; 12 | this.key = url; 13 | } 14 | 15 | public validate() { 16 | const colonIndex = this.url.indexOf("."); 17 | return !(this.url.length === 0) && colonIndex !== -1 && colonIndex !== this.url.length - 1; 18 | } 19 | 20 | public toJson() { 21 | return JSON.stringify({url: this.url}); 22 | } 23 | } 24 | 25 | export function fromJson(json: any): Relay { 26 | return new Relay(json.url); 27 | } 28 | -------------------------------------------------------------------------------- /web/frontoffice/src/lib/components/Confirmation.svelte: -------------------------------------------------------------------------------- 1 | 13 | 14 | 20 | 21 | 22 | -------------------------------------------------------------------------------- /web/shared/src/lib/components/pagebuilder/lexical-editor/images/icons/trash3.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /web/frontoffice/src/lib/types/stall.ts: -------------------------------------------------------------------------------- 1 | export interface ShoppingCartItem { 2 | id: string 3 | name: string; 4 | description: string; 5 | price: number; 6 | currency: string; 7 | image: string; 8 | quantity: number; 9 | orderQuantity: number; 10 | createdAt: number; 11 | stall_id: string; 12 | merchantPubkey: string; 13 | } 14 | 15 | export type stallOrder = { 16 | id: string, 17 | type: 0, 18 | name?: string, 19 | address?: string, 20 | message?: string, 21 | contact: { 22 | nostr?: string, 23 | phone?: string, 24 | email?: string, 25 | }, 26 | items: [ 27 | { 28 | product_id: string, 29 | quantity: number 30 | } 31 | ] 32 | } 33 | -------------------------------------------------------------------------------- /web/shared/src/lib/components/pagebuilder/lexical-editor/images/icons/card-checklist.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /web/shared/src/lib/components/icons/Sun.svelte: -------------------------------------------------------------------------------- 1 | 2 | 3 | -------------------------------------------------------------------------------- /web/shared/src/lib/components/pagebuilder/lexical-editor/images/icons/chat-square-quote.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /web/frontoffice/svelte.config.js: -------------------------------------------------------------------------------- 1 | import adapter from '@sveltejs/adapter-static'; 2 | import { vitePreprocess } from '@sveltejs/vite-plugin-svelte'; 3 | 4 | /** @type {import('@sveltejs/kit').Config} */ 5 | const config = { 6 | kit: { 7 | adapter: adapter({ 8 | pages: 'build', 9 | assets: 'build', 10 | fallback: 'index.html', 11 | precompress: false, 12 | strict: true 13 | }), 14 | alias: { 15 | '$sharedLib': '../shared/src/lib', 16 | }, 17 | prerender: { 18 | entries: [ 19 | '*', 20 | '/p/[pubkey]', 21 | '/p/[pubkey]/stall/[stallId]', 22 | '/product/[product_id]', 23 | '/[...slug]' 24 | ] 25 | }, 26 | paths: { 27 | base: '' 28 | } 29 | }, 30 | preprocess: vitePreprocess(), 31 | }; 32 | 33 | export default config; 34 | -------------------------------------------------------------------------------- /web/shared/src/lib/components/pagebuilder/lexical-editor/images/icons/type-superscript.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /web/frontoffice/src/lib/components/nostr/Nip05Checkmark.svelte: -------------------------------------------------------------------------------- 1 | 7 | 8 | 18 | -------------------------------------------------------------------------------- /web/shared/src/lib/components/pagebuilder/lexical-editor/images/icons/type-subscript.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /web/shared/src/lib/components/icons/Telegram.svelte: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /web/shared/src/lib/components/pagebuilder/lexical-editor/images/icons/journal-text.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /web/shared/src/lib/components/pagebuilder/lexical-editor/images/icons/journal-code.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /birdwatcher/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM python:3.11-slim-bookworm 2 | 3 | COPY ./birdwatcher/requirements.txt / 4 | 5 | RUN apt-get update \ 6 | && apt-get install -y wget gcc \ 7 | && pip3 install -r /requirements.txt \ 8 | && echo "deb http://deb.debian.org/debian/ unstable main contrib non-free" >> /etc/apt/sources.list.d/debian.list \ 9 | && apt-get update \ 10 | && apt-get install -y --no-install-recommends firefox 11 | 12 | COPY ./birdwatcher /app 13 | 14 | WORKDIR /app 15 | 16 | RUN wget https://github.com/mozilla/geckodriver/releases/download/v0.33.0/geckodriver-v0.33.0-linux32.tar.gz \ 17 | && tar xzfv geckodriver-v0.33.0-linux32.tar.gz && rm geckodriver-v0.33.0-linux32.tar.gz \ 18 | && chmod +x geckodriver && chown root:root geckodriver 19 | 20 | ENV PYTHONPATH /app 21 | ENV PYTHONUNBUFFERED 1 22 | -------------------------------------------------------------------------------- /web/backoffice/src/lib/components/notifications/Wallets.svelte: -------------------------------------------------------------------------------- 1 |

2 | Scan with 3 | Breez or 4 | Zeus, or use 5 | Alby, 6 |

7 |

8 | ThunderHub, 9 | Sparrow or any 10 | LNurl compatible wallet. 11 |

12 | -------------------------------------------------------------------------------- /api/migrations/versions/51f2466fa172_add_xpub.py: -------------------------------------------------------------------------------- 1 | """Add xpub. 2 | 3 | Revision ID: 51f2466fa172 4 | Revises: 7fddb56a6944 5 | Create Date: 2022-07-29 07:53:39.332097 6 | 7 | """ 8 | from alembic import op 9 | import sqlalchemy as sa 10 | 11 | 12 | # revision identifiers, used by Alembic. 13 | revision = '51f2466fa172' 14 | down_revision = '7fddb56a6944' 15 | branch_labels = None 16 | depends_on = None 17 | 18 | 19 | def upgrade(): 20 | # ### commands auto generated by Alembic - please adjust! ### 21 | op.add_column('users', sa.Column('xpub', sa.String(length=128), nullable=True)) 22 | # ### end Alembic commands ### 23 | 24 | 25 | def downgrade(): 26 | # ### commands auto generated by Alembic - please adjust! ### 27 | op.drop_column('users', 'xpub') 28 | # ### end Alembic commands ### 29 | -------------------------------------------------------------------------------- /web/frontoffice/src/app.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 11 | 12 | 21 | 22 | %sveltekit.head% 23 | 24 | 25 |
26 | %sveltekit.body% 27 |
28 | 29 | 30 | -------------------------------------------------------------------------------- /web/shared/src/lib/components/pagebuilder/lexical-editor/images/icons/palette.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /web/shared/svelte.config.js: -------------------------------------------------------------------------------- 1 | import adapter from '@sveltejs/adapter-auto'; 2 | import { vitePreprocess } from '@sveltejs/vite-plugin-svelte'; 3 | 4 | /** @type {import('@sveltejs/kit').Config} */ 5 | const config = { 6 | // Consult https://kit.svelte.dev/docs/integrations#preprocessors 7 | // for more information about preprocessors 8 | preprocess: vitePreprocess(), 9 | 10 | kit: { 11 | // adapter-auto only supports some environments, see https://kit.svelte.dev/docs/adapter-auto for a list. 12 | // If your environment is not supported or you settled on a specific environment, switch out the adapter. 13 | // See https://kit.svelte.dev/docs/adapters for more information about adapters. 14 | adapter: adapter(), 15 | alias: { 16 | '$sharedLib': 'src/lib', 17 | } 18 | } 19 | }; 20 | 21 | export default config; 22 | -------------------------------------------------------------------------------- /web/backoffice/src/lib/components/YearPicker.svelte: -------------------------------------------------------------------------------- 1 | 16 | 17 | -------------------------------------------------------------------------------- /api/migrations/versions/1a2cb89c865c_add_nostr_profile_image.py: -------------------------------------------------------------------------------- 1 | """Add nostr profile image. 2 | 3 | Revision ID: 1a2cb89c865c 4 | Revises: 9172e04eca3b 5 | Create Date: 2023-02-23 09:10:25.784913 6 | 7 | """ 8 | from alembic import op 9 | import sqlalchemy as sa 10 | 11 | # revision identifiers, used by Alembic. 12 | revision = '1a2cb89c865c' 13 | down_revision = '9172e04eca3b' 14 | branch_labels = None 15 | depends_on = None 16 | 17 | def upgrade(): 18 | with op.batch_alter_table('users', schema=None) as batch_op: 19 | batch_op.alter_column(column_name='twitter_profile_image_url', new_column_name='profile_image_url') 20 | 21 | def downgrade(): 22 | with op.batch_alter_table('users', schema=None) as batch_op: 23 | batch_op.alter_column(column_name='profile_image_url', new_column_name='twitter_profile_image_url') 24 | -------------------------------------------------------------------------------- /api/migrations/versions/842599b62770_add_item_category.py: -------------------------------------------------------------------------------- 1 | """Add item category. 2 | 3 | Revision ID: 842599b62770 4 | Revises: 17cfd040c3ea 5 | Create Date: 2022-10-25 14:45:38.246788 6 | 7 | """ 8 | from alembic import op 9 | import sqlalchemy as sa 10 | 11 | 12 | # revision identifiers, used by Alembic. 13 | revision = '842599b62770' 14 | down_revision = '17cfd040c3ea' 15 | branch_labels = None 16 | depends_on = None 17 | 18 | 19 | def upgrade(): 20 | # ### commands auto generated by Alembic - please adjust! ### 21 | op.add_column('items', sa.Column('category', sa.String(length=21), nullable=True)) 22 | # ### end Alembic commands ### 23 | 24 | 25 | def downgrade(): 26 | # ### commands auto generated by Alembic - please adjust! ### 27 | op.drop_column('items', 'category') 28 | # ### end Alembic commands ### 29 | -------------------------------------------------------------------------------- /web/frontoffice/src/lib/components/YearPicker.svelte: -------------------------------------------------------------------------------- 1 | 16 | 17 | 23 | -------------------------------------------------------------------------------- /web/shared/src/lib/components/pagebuilder/lexical-editor/images/icons/diagram-2.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /api/migrations/versions/8e5794f2abd4_make_skin_in_the_game_optional_per_.py: -------------------------------------------------------------------------------- 1 | """Make skin in the game optional per-auction. 2 | 3 | Revision ID: 8e5794f2abd4 4 | Revises: 0f52341f4fa1 5 | Create Date: 2023-09-04 15:19:05.944150 6 | 7 | """ 8 | from alembic import op 9 | import sqlalchemy as sa 10 | 11 | 12 | # revision identifiers, used by Alembic. 13 | revision = '8e5794f2abd4' 14 | down_revision = '0f52341f4fa1' 15 | branch_labels = None 16 | depends_on = None 17 | 18 | def upgrade(): 19 | with op.batch_alter_table('auctions', schema=None) as batch_op: 20 | batch_op.add_column(sa.Column('skin_in_the_game_required', sa.Boolean(), nullable=False, server_default="false")) 21 | 22 | def downgrade(): 23 | with op.batch_alter_table('auctions', schema=None) as batch_op: 24 | batch_op.drop_column('skin_in_the_game_required') 25 | -------------------------------------------------------------------------------- /web/backoffice/src/routes/account/orders/+page.svelte: -------------------------------------------------------------------------------- 1 | 7 | 8 | My received orders 9 | 10 |
11 | 18 |
19 | -------------------------------------------------------------------------------- /web/frontoffice/src/lib/components/QRLocal.svelte: -------------------------------------------------------------------------------- 1 | 11 | 12 | 13 | 20 | 21 |
22 | 23 | 24 |
25 | 26 | 27 | 28 | -------------------------------------------------------------------------------- /api/migrations/versions/11234423a696_remove_cancel.py: -------------------------------------------------------------------------------- 1 | """Remove cancel. 2 | 3 | Revision ID: 11234423a696 4 | Revises: ba6b5760534a 5 | Create Date: 2022-05-11 07:53:25.961557 6 | 7 | """ 8 | from alembic import op 9 | import sqlalchemy as sa 10 | 11 | 12 | # revision identifiers, used by Alembic. 13 | revision = '11234423a696' 14 | down_revision = 'ba6b5760534a' 15 | branch_labels = None 16 | depends_on = None 17 | 18 | 19 | def upgrade(): 20 | # ### commands auto generated by Alembic - please adjust! ### 21 | op.drop_column('auctions', 'canceled') 22 | # ### end Alembic commands ### 23 | 24 | 25 | def downgrade(): 26 | # ### commands auto generated by Alembic - please adjust! ### 27 | op.add_column('auctions', sa.Column('canceled', sa.BOOLEAN(), autoincrement=False, nullable=False)) 28 | # ### end Alembic commands ### 29 | -------------------------------------------------------------------------------- /docker-compose.prod.yml: -------------------------------------------------------------------------------- 1 | version: '3.6' 2 | 3 | services: 4 | smtp: 5 | environment: 6 | - ALLOWED_SENDER_DOMAINS=plebeian.market 7 | web: 8 | build: 9 | args: 10 | - BUILD_MODE=-production 11 | env_file: .env.prod 12 | api: 13 | healthcheck: 14 | test: ["CMD", "curl", "-f", "https://plebeian.market/api/status"] 15 | interval: 3s 16 | timeout: 3s 17 | retries: 5 18 | env_file: .env.prod 19 | environment: 20 | - S3_FILENAME_PREFIX=P_ 21 | nginx: 22 | environment: 23 | - VIRTUAL_HOST=plebeian.market 24 | - LETSENCRYPT_HOST=plebeian.market 25 | finalize-auctions: 26 | env_file: .env.prod 27 | settle-btc-payments: 28 | env_file: .env.prod 29 | settle-lightning-payments: 30 | env_file: .env.prod 31 | birdwatcher: 32 | env_file: .env.prod 33 | -------------------------------------------------------------------------------- /api/migrations/versions/17cfd040c3ea_add_campaign_banner.py: -------------------------------------------------------------------------------- 1 | """Add campaign banner. 2 | 3 | Revision ID: 17cfd040c3ea 4 | Revises: 00b5877a8e77 5 | Create Date: 2022-10-21 13:54:56.809544 6 | 7 | """ 8 | from alembic import op 9 | import sqlalchemy as sa 10 | 11 | 12 | # revision identifiers, used by Alembic. 13 | revision = '17cfd040c3ea' 14 | down_revision = '00b5877a8e77' 15 | branch_labels = None 16 | depends_on = None 17 | 18 | 19 | def upgrade(): 20 | # ### commands auto generated by Alembic - please adjust! ### 21 | op.add_column('campaigns', sa.Column('banner_url', sa.String(length=256), nullable=True)) 22 | # ### end Alembic commands ### 23 | 24 | 25 | def downgrade(): 26 | # ### commands auto generated by Alembic - please adjust! ### 27 | op.drop_column('campaigns', 'banner_url') 28 | # ### end Alembic commands ### 29 | -------------------------------------------------------------------------------- /api/migrations/versions/0b933fdb55c0_add_is_featured_to_auction.py: -------------------------------------------------------------------------------- 1 | """Add is_featured to auction. 2 | 3 | Revision ID: 0b933fdb55c0 4 | Revises: 9055e2033d85 5 | Create Date: 2022-06-24 12:41:15.785471 6 | 7 | """ 8 | from alembic import op 9 | import sqlalchemy as sa 10 | 11 | 12 | # revision identifiers, used by Alembic. 13 | revision = '0b933fdb55c0' 14 | down_revision = '9055e2033d85' 15 | branch_labels = None 16 | depends_on = None 17 | 18 | 19 | def upgrade(): 20 | # ### commands auto generated by Alembic - please adjust! ### 21 | op.add_column('auctions', sa.Column('is_featured', sa.Boolean(), nullable=True)) 22 | # ### end Alembic commands ### 23 | 24 | 25 | def downgrade(): 26 | # ### commands auto generated by Alembic - please adjust! ### 27 | op.drop_column('auctions', 'is_featured') 28 | # ### end Alembic commands ### 29 | -------------------------------------------------------------------------------- /api/migrations/versions/1ce2e632ba08_add_usd_price_to_sales.py: -------------------------------------------------------------------------------- 1 | """Add USD price to sales. 2 | 3 | Revision ID: 1ce2e632ba08 4 | Revises: c6d089d54e86 5 | Create Date: 2022-09-19 09:30:18.098540 6 | 7 | """ 8 | from alembic import op 9 | import sqlalchemy as sa 10 | 11 | 12 | # revision identifiers, used by Alembic. 13 | revision = '1ce2e632ba08' 14 | down_revision = 'c6d089d54e86' 15 | branch_labels = None 16 | depends_on = None 17 | 18 | 19 | def upgrade(): 20 | # ### commands auto generated by Alembic - please adjust! ### 21 | op.add_column('sales', sa.Column('price_usd', sa.Float(), server_default="0", nullable=False)) 22 | # ### end Alembic commands ### 23 | 24 | 25 | def downgrade(): 26 | # ### commands auto generated by Alembic - please adjust! ### 27 | op.drop_column('sales', 'price_usd') 28 | # ### end Alembic commands ### 29 | -------------------------------------------------------------------------------- /api/migrations/versions/7bfdc024cc59_make_verified_identities_required_optional.py: -------------------------------------------------------------------------------- 1 | """Make verified_identities_required optional per-auction. 2 | 3 | Revision ID: 7bfdc024cc59 4 | Revises: 7218961e6757 5 | Create Date: 2024-01-15 13:56:56.087179 6 | 7 | """ 8 | from alembic import op 9 | import sqlalchemy as sa 10 | 11 | # revision identifiers, used by Alembic. 12 | revision = '7bfdc024cc59' 13 | down_revision = '7218961e6757' 14 | branch_labels = None 15 | depends_on = None 16 | 17 | def upgrade(): 18 | with op.batch_alter_table('auctions', schema=None) as batch_op: 19 | batch_op.add_column(sa.Column('verified_identities_required', sa.Integer(), nullable=False, server_default="0")) 20 | 21 | def downgrade(): 22 | with op.batch_alter_table('auctions', schema=None) as batch_op: 23 | batch_op.drop_column('verified_identities_required') 24 | -------------------------------------------------------------------------------- /api/migrations/versions/b1b8a655e102_add_stall_settings.py: -------------------------------------------------------------------------------- 1 | """Add stall settings. 2 | 3 | Revision ID: b1b8a655e102 4 | Revises: 1ce2e632ba08 5 | Create Date: 2022-09-22 10:33:47.677597 6 | 7 | """ 8 | from alembic import op 9 | import sqlalchemy as sa 10 | 11 | 12 | # revision identifiers, used by Alembic. 13 | revision = 'b1b8a655e102' 14 | down_revision = '1ce2e632ba08' 15 | branch_labels = None 16 | depends_on = None 17 | 18 | 19 | def upgrade(): 20 | # ### commands auto generated by Alembic - please adjust! ### 21 | op.add_column('users', sa.Column('stall_banner_url', sa.String(length=256), nullable=True)) 22 | # ### end Alembic commands ### 23 | 24 | 25 | def downgrade(): 26 | # ### commands auto generated by Alembic - please adjust! ### 27 | op.drop_column('users', 'stall_banner_url') 28 | # ### end Alembic commands ### 29 | -------------------------------------------------------------------------------- /api/migrations/versions/9055e2033d85_add_shipping_location.py: -------------------------------------------------------------------------------- 1 | """Add shipping location. 2 | 3 | Revision ID: 9055e2033d85 4 | Revises: 7cef5f311cbb 5 | Create Date: 2022-06-08 07:28:16.731518 6 | 7 | """ 8 | from alembic import op 9 | import sqlalchemy as sa 10 | 11 | 12 | # revision identifiers, used by Alembic. 13 | revision = '9055e2033d85' 14 | down_revision = '7cef5f311cbb' 15 | branch_labels = None 16 | depends_on = None 17 | 18 | 19 | def upgrade(): 20 | # ### commands auto generated by Alembic - please adjust! ### 21 | op.add_column('auctions', sa.Column('shipping_from', sa.String(length=64), nullable=True)) 22 | # ### end Alembic commands ### 23 | 24 | 25 | def downgrade(): 26 | # ### commands auto generated by Alembic - please adjust! ### 27 | op.drop_column('auctions', 'shipping_from') 28 | # ### end Alembic commands ### 29 | -------------------------------------------------------------------------------- /api/migrations/versions/81fd68652e8b_add_auction_created_at.py: -------------------------------------------------------------------------------- 1 | """Add Auction.created_at. 2 | 3 | Revision ID: 81fd68652e8b 4 | Revises: 11234423a696 5 | Create Date: 2022-05-11 08:34:54.371502 6 | 7 | """ 8 | from alembic import op 9 | import sqlalchemy as sa 10 | 11 | 12 | # revision identifiers, used by Alembic. 13 | revision = '81fd68652e8b' 14 | down_revision = '11234423a696' 15 | branch_labels = None 16 | depends_on = None 17 | 18 | 19 | def upgrade(): 20 | # ### commands auto generated by Alembic - please adjust! ### 21 | op.add_column('auctions', sa.Column('created_at', sa.DateTime(), nullable=False, server_default="now()")) 22 | # ### end Alembic commands ### 23 | 24 | 25 | def downgrade(): 26 | # ### commands auto generated by Alembic - please adjust! ### 27 | op.drop_column('auctions', 'created_at') 28 | # ### end Alembic commands ### 29 | -------------------------------------------------------------------------------- /api/migrations/versions/788294334544_add_twitter_profile_picture.py: -------------------------------------------------------------------------------- 1 | """Add Twitter profile picture. 2 | 3 | Revision ID: 788294334544 4 | Revises: 3ab9cd7f2087 5 | Create Date: 2022-05-10 10:12:02.900771 6 | 7 | """ 8 | from alembic import op 9 | import sqlalchemy as sa 10 | 11 | 12 | # revision identifiers, used by Alembic. 13 | revision = '788294334544' 14 | down_revision = '3ab9cd7f2087' 15 | branch_labels = None 16 | depends_on = None 17 | 18 | 19 | def upgrade(): 20 | # ### commands auto generated by Alembic - please adjust! ### 21 | op.add_column('users', sa.Column('twitter_profile_image_url', sa.String(length=256), nullable=True)) 22 | # ### end Alembic commands ### 23 | 24 | 25 | def downgrade(): 26 | # ### commands auto generated by Alembic - please adjust! ### 27 | op.drop_column('users', 'twitter_profile_image_url') 28 | # ### end Alembic commands ### 29 | -------------------------------------------------------------------------------- /web/shared/src/lib/components/FiatChooser.svelte: -------------------------------------------------------------------------------- 1 | 19 | 20 | 25 | -------------------------------------------------------------------------------- /web/shared/src/lib/images/profile_picture_placeholder.svg: -------------------------------------------------------------------------------- 1 | man-1-flat -------------------------------------------------------------------------------- /api/migrations/versions/7b9b9d83c135_add_verification_tweet_id.py: -------------------------------------------------------------------------------- 1 | """Add verification tweet ID. 2 | 3 | Revision ID: 7b9b9d83c135 4 | Revises: 0b933fdb55c0 5 | Create Date: 2022-06-28 13:20:03.030794 6 | 7 | """ 8 | from alembic import op 9 | import sqlalchemy as sa 10 | 11 | 12 | # revision identifiers, used by Alembic. 13 | revision = '7b9b9d83c135' 14 | down_revision = '0b933fdb55c0' 15 | branch_labels = None 16 | depends_on = None 17 | 18 | 19 | def upgrade(): 20 | # ### commands auto generated by Alembic - please adjust! ### 21 | op.add_column('users', sa.Column('twitter_username_verification_tweet_id', sa.String(length=64), nullable=True)) 22 | # ### end Alembic commands ### 23 | 24 | 25 | def downgrade(): 26 | # ### commands auto generated by Alembic - please adjust! ### 27 | op.drop_column('users', 'twitter_username_verification_tweet_id') 28 | # ### end Alembic commands ### 29 | -------------------------------------------------------------------------------- /web/frontoffice/src/lib/components/TweetButton.svelte: -------------------------------------------------------------------------------- 1 | 4 | 5 | 6 | 7 | 8 | 9 |   10 | Tweet 11 | 12 | -------------------------------------------------------------------------------- /web/backoffice/src/lib/components/notifications/ErrorBox.svelte: -------------------------------------------------------------------------------- 1 | 5 | 6 |
7 | 8 |
9 | 10 | {#if hasDetail && detailVisible} 11 | 12 | {/if} 13 |
14 |
15 | {#if hasDetail && !detailVisible} 16 | 19 | {/if} 20 |
21 |
22 | -------------------------------------------------------------------------------- /web/backoffice/src/lib/components/auth/Choice.svelte: -------------------------------------------------------------------------------- 1 | 19 | 20 | 25 | 26 | {#if provider === Provider.Lnurl} 27 | dispatch('login', {})} /> 28 | {/if} 29 | -------------------------------------------------------------------------------- /web/frontoffice/src/routes/donations/+page.svelte: -------------------------------------------------------------------------------- 1 | 4 | 5 | 6 | Support Us 7 | 8 | 9 | 10 | Support Us 11 | 12 |
13 |
14 |

If you like this project, consider making a donation to support us.

15 | 16 | 23 |
24 |
25 | -------------------------------------------------------------------------------- /web/shared/src/lib/components/pagebuilder/lexical-editor/images/icons/youtube.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /api/migrations/versions/3bbdeac35736_add_order_paid_at.py: -------------------------------------------------------------------------------- 1 | """Add Order.paid_at. 2 | 3 | Revision ID: 3bbdeac35736 4 | Revises: dc75ae2f8b83 5 | Create Date: 2023-05-23 12:17:38.892959 6 | 7 | """ 8 | from alembic import op 9 | import sqlalchemy as sa 10 | 11 | 12 | # revision identifiers, used by Alembic. 13 | revision = '3bbdeac35736' 14 | down_revision = 'dc75ae2f8b83' 15 | branch_labels = None 16 | depends_on = None 17 | 18 | 19 | def upgrade(): 20 | # ### commands auto generated by Alembic - please adjust! ### 21 | with op.batch_alter_table('orders', schema=None) as batch_op: 22 | batch_op.add_column(sa.Column('paid_at', sa.DateTime(), nullable=True)) 23 | 24 | # ### end Alembic commands ### 25 | 26 | 27 | def downgrade(): 28 | # ### commands auto generated by Alembic - please adjust! ### 29 | with op.batch_alter_table('orders', schema=None) as batch_op: 30 | batch_op.drop_column('paid_at') 31 | 32 | # ### end Alembic commands ### 33 | -------------------------------------------------------------------------------- /api/migrations/versions/f4c195bdf6c4_add_shipping_date.py: -------------------------------------------------------------------------------- 1 | """Add shipping date. 2 | 3 | Revision ID: f4c195bdf6c4 4 | Revises: b06199cd8026 5 | Create Date: 2023-06-01 09:37:07.887959 6 | 7 | """ 8 | from alembic import op 9 | import sqlalchemy as sa 10 | 11 | 12 | # revision identifiers, used by Alembic. 13 | revision = 'f4c195bdf6c4' 14 | down_revision = 'b06199cd8026' 15 | branch_labels = None 16 | depends_on = None 17 | 18 | 19 | def upgrade(): 20 | # ### commands auto generated by Alembic - please adjust! ### 21 | with op.batch_alter_table('orders', schema=None) as batch_op: 22 | batch_op.add_column(sa.Column('shipped_at', sa.DateTime(), nullable=True)) 23 | 24 | # ### end Alembic commands ### 25 | 26 | 27 | def downgrade(): 28 | # ### commands auto generated by Alembic - please adjust! ### 29 | with op.batch_alter_table('orders', schema=None) as batch_op: 30 | batch_op.drop_column('shipped_at') 31 | 32 | # ### end Alembic commands ### 33 | -------------------------------------------------------------------------------- /api/migrations/versions/673138f33cbb_add_wallet_name.py: -------------------------------------------------------------------------------- 1 | """Add wallet name. 2 | 3 | Revision ID: 673138f33cbb 4 | Revises: d9a75b8555ed 5 | Create Date: 2023-08-17 14:01:44.314479 6 | 7 | """ 8 | from alembic import op 9 | import sqlalchemy as sa 10 | 11 | 12 | # revision identifiers, used by Alembic. 13 | revision = '673138f33cbb' 14 | down_revision = 'd9a75b8555ed' 15 | branch_labels = None 16 | depends_on = None 17 | 18 | 19 | def upgrade(): 20 | # ### commands auto generated by Alembic - please adjust! ### 21 | with op.batch_alter_table('users', schema=None) as batch_op: 22 | batch_op.add_column(sa.Column('wallet_name', sa.String(length=128), nullable=True)) 23 | 24 | # ### end Alembic commands ### 25 | 26 | 27 | def downgrade(): 28 | # ### commands auto generated by Alembic - please adjust! ### 29 | with op.batch_alter_table('users', schema=None) as batch_op: 30 | batch_op.drop_column('wallet_name') 31 | 32 | # ### end Alembic commands ### 33 | -------------------------------------------------------------------------------- /api/migrations/versions/5883dd3619bf_remove_is_hidden.py: -------------------------------------------------------------------------------- 1 | """Remove is_hidden. 2 | 3 | Revision ID: 5883dd3619bf 4 | Revises: bc9e3f681186 5 | Create Date: 2023-11-29 11:25:49.979260 6 | 7 | """ 8 | from alembic import op 9 | import sqlalchemy as sa 10 | 11 | 12 | # revision identifiers, used by Alembic. 13 | revision = '5883dd3619bf' 14 | down_revision = 'bc9e3f681186' 15 | branch_labels = None 16 | depends_on = None 17 | 18 | 19 | def upgrade(): 20 | # ### commands auto generated by Alembic - please adjust! ### 21 | with op.batch_alter_table('items', schema=None) as batch_op: 22 | batch_op.drop_column('is_hidden') 23 | 24 | # ### end Alembic commands ### 25 | 26 | 27 | def downgrade(): 28 | # ### commands auto generated by Alembic - please adjust! ### 29 | with op.batch_alter_table('items', schema=None) as batch_op: 30 | batch_op.add_column(sa.Column('is_hidden', sa.BOOLEAN(), autoincrement=False, nullable=False)) 31 | 32 | # ### end Alembic commands ### 33 | -------------------------------------------------------------------------------- /api/migrations/versions/906f050d11ff_add_lnauth_key_name.py: -------------------------------------------------------------------------------- 1 | """Add lnauth key name. 2 | 3 | Revision ID: 906f050d11ff 4 | Revises: 5b918d4f5903 5 | Create Date: 2023-10-10 07:58:42.612864 6 | 7 | """ 8 | from alembic import op 9 | import sqlalchemy as sa 10 | 11 | 12 | # revision identifiers, used by Alembic. 13 | revision = '906f050d11ff' 14 | down_revision = '5b918d4f5903' 15 | branch_labels = None 16 | depends_on = None 17 | 18 | 19 | def upgrade(): 20 | # ### commands auto generated by Alembic - please adjust! ### 21 | with op.batch_alter_table('users', schema=None) as batch_op: 22 | batch_op.add_column(sa.Column('lnauth_key_name', sa.String(length=128), nullable=True)) 23 | 24 | # ### end Alembic commands ### 25 | 26 | 27 | def downgrade(): 28 | # ### commands auto generated by Alembic - please adjust! ### 29 | with op.batch_alter_table('users', schema=None) as batch_op: 30 | batch_op.drop_column('lnauth_key_name') 31 | 32 | # ### end Alembic commands ### 33 | -------------------------------------------------------------------------------- /api/migrations/versions/e74ff40a1b2a_add_nostr_columns.py: -------------------------------------------------------------------------------- 1 | """add_nostr_columns 2 | 3 | Revision ID: e74ff40a1b2a 4 | Revises: 3c9546a68f19 5 | Create Date: 2022-12-19 16:05:00.300138 6 | 7 | """ 8 | from alembic import op 9 | import sqlalchemy as sa 10 | 11 | 12 | # revision identifiers, used by Alembic. 13 | revision = 'e74ff40a1b2a' 14 | down_revision = '3c9546a68f19' 15 | branch_labels = None 16 | depends_on = None 17 | 18 | 19 | def upgrade(): 20 | # ### commands auto generated by Alembic - please adjust! ### 21 | with op.batch_alter_table('users', schema=None) as batch_op: 22 | batch_op.add_column(sa.Column('nostr_private_key', sa.String(length=64), nullable=True)) 23 | 24 | # ### end Alembic commands ### 25 | 26 | 27 | def downgrade(): 28 | # ### commands auto generated by Alembic - please adjust! ### 29 | with op.batch_alter_table('users', schema=None) as batch_op: 30 | batch_op.drop_column('nostr_private_key') 31 | 32 | # ### end Alembic commands ### 33 | -------------------------------------------------------------------------------- /web/shared/src/lib/components/pagebuilder/lexical-editor/images/icons/list-ol.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /api/migrations/versions/b06199cd8026_add_lightning_address.py: -------------------------------------------------------------------------------- 1 | """Add lightning address. 2 | 3 | Revision ID: b06199cd8026 4 | Revises: 3bbdeac35736 5 | Create Date: 2023-05-31 10:10:42.840498 6 | 7 | """ 8 | from alembic import op 9 | import sqlalchemy as sa 10 | 11 | 12 | # revision identifiers, used by Alembic. 13 | revision = 'b06199cd8026' 14 | down_revision = '3bbdeac35736' 15 | branch_labels = None 16 | depends_on = None 17 | 18 | 19 | def upgrade(): 20 | # ### commands auto generated by Alembic - please adjust! ### 21 | with op.batch_alter_table('users', schema=None) as batch_op: 22 | batch_op.add_column(sa.Column('lightning_address', sa.String(length=64), nullable=True)) 23 | 24 | # ### end Alembic commands ### 25 | 26 | 27 | def downgrade(): 28 | # ### commands auto generated by Alembic - please adjust! ### 29 | with op.batch_alter_table('users', schema=None) as batch_op: 30 | batch_op.drop_column('lightning_address') 31 | 32 | # ### end Alembic commands ### 33 | -------------------------------------------------------------------------------- /api/migrations/versions/d711e375a2ec_add_xpub_to_campaigns.py: -------------------------------------------------------------------------------- 1 | """Add xpub to campaigns. 2 | 3 | Revision ID: d711e375a2ec 4 | Revises: f63c68a9afa1 5 | Create Date: 2022-10-18 09:11:19.552001 6 | 7 | """ 8 | from alembic import op 9 | import sqlalchemy as sa 10 | from sqlalchemy.dialects import postgresql 11 | 12 | # revision identifiers, used by Alembic. 13 | revision = 'd711e375a2ec' 14 | down_revision = 'f63c68a9afa1' 15 | branch_labels = None 16 | depends_on = None 17 | 18 | def upgrade(): 19 | # ### commands auto generated by Alembic - please adjust! ### 20 | op.add_column('campaigns', sa.Column('xpub', sa.String(length=128), nullable=False)) 21 | op.add_column('campaigns', sa.Column('xpub_index', sa.Integer(), nullable=False)) 22 | # ### end Alembic commands ### 23 | 24 | def downgrade(): 25 | # ### commands auto generated by Alembic - please adjust! ### 26 | op.drop_column('campaigns', 'xpub_index') 27 | op.drop_column('campaigns', 'xpub') 28 | # ### end Alembic commands ### 29 | -------------------------------------------------------------------------------- /api/migrations/versions/7218961e6757_support_digital_items.py: -------------------------------------------------------------------------------- 1 | """Support digital items. 2 | 3 | Revision ID: 7218961e6757 4 | Revises: 5883dd3619bf 5 | Create Date: 2023-11-29 11:50:18.521217 6 | 7 | """ 8 | from alembic import op 9 | import sqlalchemy as sa 10 | 11 | 12 | # revision identifiers, used by Alembic. 13 | revision = '7218961e6757' 14 | down_revision = '5883dd3619bf' 15 | branch_labels = None 16 | depends_on = None 17 | 18 | 19 | def upgrade(): 20 | # ### commands auto generated by Alembic - please adjust! ### 21 | with op.batch_alter_table('items', schema=None) as batch_op: 22 | batch_op.add_column(sa.Column('digital_item_message', sa.String(length=2100), nullable=True)) 23 | 24 | # ### end Alembic commands ### 25 | 26 | 27 | def downgrade(): 28 | # ### commands auto generated by Alembic - please adjust! ### 29 | with op.batch_alter_table('items', schema=None) as batch_op: 30 | batch_op.drop_column('digital_item_message') 31 | 32 | # ### end Alembic commands ### 33 | -------------------------------------------------------------------------------- /api/migrations/versions/d940f3567a1c_add_stall_name_and_description.py: -------------------------------------------------------------------------------- 1 | """Add stall name and description. 2 | 3 | Revision ID: d940f3567a1c 4 | Revises: b1b8a655e102 5 | Create Date: 2022-09-27 08:26:46.874789 6 | 7 | """ 8 | from alembic import op 9 | import sqlalchemy as sa 10 | 11 | 12 | # revision identifiers, used by Alembic. 13 | revision = 'd940f3567a1c' 14 | down_revision = 'b1b8a655e102' 15 | branch_labels = None 16 | depends_on = None 17 | 18 | 19 | def upgrade(): 20 | # ### commands auto generated by Alembic - please adjust! ### 21 | op.add_column('users', sa.Column('stall_name', sa.String(length=256), nullable=True)) 22 | op.add_column('users', sa.Column('stall_description', sa.String(length=21000), nullable=True)) 23 | # ### end Alembic commands ### 24 | 25 | 26 | def downgrade(): 27 | # ### commands auto generated by Alembic - please adjust! ### 28 | op.drop_column('users', 'stall_description') 29 | op.drop_column('users', 'stall_name') 30 | # ### end Alembic commands ### 31 | -------------------------------------------------------------------------------- /api/migrations/versions/a0a088a1ee6c_differentiate_cancellation_from_.py: -------------------------------------------------------------------------------- 1 | """Differentiate cancellation from expiration. 2 | 3 | Revision ID: a0a088a1ee6c 4 | Revises: f4c195bdf6c4 5 | Create Date: 2023-06-06 11:03:36.551824 6 | 7 | """ 8 | from alembic import op 9 | import sqlalchemy as sa 10 | 11 | 12 | # revision identifiers, used by Alembic. 13 | revision = 'a0a088a1ee6c' 14 | down_revision = 'f4c195bdf6c4' 15 | branch_labels = None 16 | depends_on = None 17 | 18 | 19 | def upgrade(): 20 | # ### commands auto generated by Alembic - please adjust! ### 21 | with op.batch_alter_table('orders', schema=None) as batch_op: 22 | batch_op.add_column(sa.Column('canceled_at', sa.DateTime(), nullable=True)) 23 | 24 | # ### end Alembic commands ### 25 | 26 | 27 | def downgrade(): 28 | # ### commands auto generated by Alembic - please adjust! ### 29 | with op.batch_alter_table('orders', schema=None) as batch_op: 30 | batch_op.drop_column('canceled_at') 31 | 32 | # ### end Alembic commands ### 33 | -------------------------------------------------------------------------------- /api/migrations/versions/3e2210c258eb_add_index.py: -------------------------------------------------------------------------------- 1 | """Add index. 2 | 3 | Revision ID: 3e2210c258eb 4 | Revises: 8662155d4e64 5 | Create Date: 2023-07-29 14:35:48.711384 6 | 7 | """ 8 | from alembic import op 9 | import sqlalchemy as sa 10 | 11 | 12 | # revision identifiers, used by Alembic. 13 | revision = '3e2210c258eb' 14 | down_revision = '8662155d4e64' 15 | branch_labels = None 16 | depends_on = None 17 | 18 | 19 | def upgrade(): 20 | # ### commands auto generated by Alembic - please adjust! ### 21 | with op.batch_alter_table('bids', schema=None) as batch_op: 22 | batch_op.create_index(batch_op.f('ix_bids_buyer_nostr_public_key'), ['buyer_nostr_public_key'], unique=False) 23 | 24 | # ### end Alembic commands ### 25 | 26 | 27 | def downgrade(): 28 | # ### commands auto generated by Alembic - please adjust! ### 29 | with op.batch_alter_table('bids', schema=None) as batch_op: 30 | batch_op.drop_index(batch_op.f('ix_bids_buyer_nostr_public_key')) 31 | 32 | # ### end Alembic commands ### 33 | -------------------------------------------------------------------------------- /api/migrations/versions/fc10599148c8_add_shipping_estimates.py: -------------------------------------------------------------------------------- 1 | """Add shipping estimates. 2 | 3 | Revision ID: fc10599148c8 4 | Revises: 51f2466fa172 5 | Create Date: 2022-08-08 08:49:26.127340 6 | 7 | """ 8 | from alembic import op 9 | import sqlalchemy as sa 10 | 11 | 12 | # revision identifiers, used by Alembic. 13 | revision = 'fc10599148c8' 14 | down_revision = '51f2466fa172' 15 | branch_labels = None 16 | depends_on = None 17 | 18 | 19 | def upgrade(): 20 | # ### commands auto generated by Alembic - please adjust! ### 21 | op.add_column('auctions', sa.Column('shipping_estimate_domestic', sa.String(length=64), nullable=True)) 22 | op.add_column('auctions', sa.Column('shipping_estimate_worldwide', sa.String(length=64), nullable=True)) 23 | # ### end Alembic commands ### 24 | 25 | 26 | def downgrade(): 27 | # ### commands auto generated by Alembic - please adjust! ### 28 | op.drop_column('auctions', 'shipping_estimate_worldwide') 29 | op.drop_column('auctions', 'shipping_estimate_domestic') 30 | # ### end Alembic commands ### 31 | -------------------------------------------------------------------------------- /web/frontoffice/src/routes/skills/+page.svelte: -------------------------------------------------------------------------------- 1 | 16 | 17 | 18 | Skills Market 19 | 20 | 21 | Skills Market 22 | 23 |
24 | Edit My Résumé 25 |
26 | 27 |
28 | 29 |

Plebs with résumés

30 | 31 | 32 | -------------------------------------------------------------------------------- /web/frontoffice/src/lib/components/Typewriter.svelte: -------------------------------------------------------------------------------- 1 | 4 | 5 | 11 | 12 |
13 | 14 |

Sell anything...

15 |
16 |
17 | 18 | 19 |

1 hour of your time

20 |

Bitcoin art

21 |

your chair

22 |

an ASIC miner

23 |

baklava

24 |

your next book

25 |
26 |
27 |
28 | 29 |

and get paid in sats.

30 |
31 |
32 | -------------------------------------------------------------------------------- /web/shared/src/lib/components/nostr/ProfilePicture.svelte: -------------------------------------------------------------------------------- 1 | 25 | 26 | {#if $NostrPublicKey} 27 | 30 | {/if} 31 | -------------------------------------------------------------------------------- /web/shared/src/lib/components/pagebuilder/lexical-editor/settings/setupEnv.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright (c) Syed Umar Anis. 3 | * 4 | * This source code is licensed under the MIT license found in the 5 | * LICENSE file in the root directory of this source tree. 6 | * 7 | */ 8 | 9 | import {DEFAULT_SETTINGS, type Settings} from './appSettings'; 10 | 11 | // override default options with query parameters if any 12 | const urlSearchParams = new URLSearchParams(window.location.search); 13 | 14 | for (const param of Object.keys(DEFAULT_SETTINGS)) { 15 | if (urlSearchParams.has(param)) { 16 | try { 17 | const value = JSON.parse(urlSearchParams.get(param) ?? 'true'); 18 | DEFAULT_SETTINGS[param as keyof Settings] = Boolean(value); 19 | } catch (error) { 20 | // eslint-disable-next-line no-console 21 | console.warn(`Unable to parse query parameter "${param}"`); 22 | } 23 | } 24 | } 25 | 26 | if (DEFAULT_SETTINGS.disableBeforeInput) { 27 | // @ts-expect-error enable legacy events 28 | delete window.InputEvent.prototype.getTargetRanges; 29 | } 30 | -------------------------------------------------------------------------------- /api/migrations/versions/f16c319d7a0f_nostr_auth_without_dm.py: -------------------------------------------------------------------------------- 1 | """Nostr auth without DM. 2 | 3 | Revision ID: f16c319d7a0f 4 | Revises: fcecd5eab28d 5 | Create Date: 2023-07-13 15:34:36.462852 6 | 7 | """ 8 | from alembic import op 9 | import sqlalchemy as sa 10 | from sqlalchemy.dialects import postgresql 11 | 12 | # revision identifiers, used by Alembic. 13 | revision = 'f16c319d7a0f' 14 | down_revision = 'fcecd5eab28d' 15 | branch_labels = None 16 | depends_on = None 17 | 18 | def upgrade(): 19 | with op.batch_alter_table('nostr_auth', schema=None) as batch_op: 20 | batch_op.drop_column('verification_phrase_check_counter') 21 | batch_op.drop_column('verification_phrase_sent_at') 22 | 23 | def downgrade(): 24 | with op.batch_alter_table('nostr_auth', schema=None) as batch_op: 25 | batch_op.add_column(sa.Column('verification_phrase_sent_at', postgresql.TIMESTAMP(), autoincrement=False, nullable=True)) 26 | batch_op.add_column(sa.Column('verification_phrase_check_counter', sa.INTEGER(), autoincrement=False, nullable=False, server_default="0")) 27 | -------------------------------------------------------------------------------- /api/migrations/versions/f25b308df569_add_stall_shipping.py: -------------------------------------------------------------------------------- 1 | """Add stall shipping. 2 | 3 | Revision ID: f25b308df569 4 | Revises: 4c6c784e30e1 5 | Create Date: 2023-05-09 11:49:06.148397 6 | 7 | """ 8 | from alembic import op 9 | import sqlalchemy as sa 10 | 11 | # revision identifiers, used by Alembic. 12 | revision = 'f25b308df569' 13 | down_revision = '4c6c784e30e1' 14 | branch_labels = None 15 | depends_on = None 16 | 17 | def upgrade(): 18 | with op.batch_alter_table('users', schema=None) as batch_op: 19 | batch_op.add_column(sa.Column('shipping_from', sa.String(length=64), nullable=True)) 20 | batch_op.add_column(sa.Column('shipping_domestic_usd', sa.Float(), nullable=False, server_default="0")) 21 | batch_op.add_column(sa.Column('shipping_worldwide_usd', sa.Float(), nullable=False, server_default="0")) 22 | 23 | def downgrade(): 24 | with op.batch_alter_table('users', schema=None) as batch_op: 25 | batch_op.drop_column('shipping_worldwide_usd') 26 | batch_op.drop_column('shipping_domestic_usd') 27 | batch_op.drop_column('shipping_from') 28 | -------------------------------------------------------------------------------- /web/backoffice/src/lib/components/NewSite.svelte: -------------------------------------------------------------------------------- 1 | 10 | 11 |

Welcome to your new site!

12 |
13 |

14 | Note: When setting up a new site, you need to define a reputation system to use! 15 |

16 |

17 | We currently only support automatically importing plebeian.market's reputation system ("skin in the game" badge), 18 | but in the future we will support importing reputation systems from other instances or starting from scratch! 19 |

20 | 21 |
22 | -------------------------------------------------------------------------------- /api/migrations/alembic.ini: -------------------------------------------------------------------------------- 1 | # A generic, single database configuration. 2 | 3 | [alembic] 4 | # template used to generate migration files 5 | # file_template = %%(rev)s_%%(slug)s 6 | 7 | # set to 'true' to run the environment during 8 | # the 'revision' command, regardless of autogenerate 9 | # revision_environment = false 10 | 11 | 12 | # Logging configuration 13 | [loggers] 14 | keys = root,sqlalchemy,alembic,flask_migrate 15 | 16 | [handlers] 17 | keys = console 18 | 19 | [formatters] 20 | keys = generic 21 | 22 | [logger_root] 23 | level = WARN 24 | handlers = console 25 | qualname = 26 | 27 | [logger_sqlalchemy] 28 | level = WARN 29 | handlers = 30 | qualname = sqlalchemy.engine 31 | 32 | [logger_alembic] 33 | level = INFO 34 | handlers = 35 | qualname = alembic 36 | 37 | [logger_flask_migrate] 38 | level = INFO 39 | handlers = 40 | qualname = flask_migrate 41 | 42 | [handler_console] 43 | class = StreamHandler 44 | args = (sys.stderr,) 45 | level = NOTSET 46 | formatter = generic 47 | 48 | [formatter_generic] 49 | format = %(levelname)-5.5s [%(name)s] %(message)s 50 | datefmt = %H:%M:%S 51 | -------------------------------------------------------------------------------- /web/shared/src/lib/components/pagebuilder/lexical-editor/images/icons/filetype-gif.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /web/backoffice/src/lib/components/settings/Nostr.svelte: -------------------------------------------------------------------------------- 1 | 10 | 11 | 17 | 18 | {#if $user} 19 | 20 | These are the relays we are currently using to publish your products. This list is currently not editable, but please contact us if you want to include additional relays. 21 | 22 | 28 | {/if} 29 | -------------------------------------------------------------------------------- /api/migrations/versions/b8f9a7b65af3_add_badge_owner.py: -------------------------------------------------------------------------------- 1 | """Add badge owner. 2 | 3 | Revision ID: b8f9a7b65af3 4 | Revises: 4ff050ac2527 5 | Create Date: 2024-01-24 11:10:25.686793 6 | 7 | """ 8 | from alembic import op 9 | import sqlalchemy as sa 10 | 11 | # revision identifiers, used by Alembic. 12 | revision = 'b8f9a7b65af3' 13 | down_revision = '4ff050ac2527' 14 | branch_labels = None 15 | depends_on = None 16 | 17 | def upgrade(): 18 | with op.batch_alter_table('badges', schema=None) as batch_op: 19 | batch_op.add_column(sa.Column('owner_public_key', sa.String(length=64), nullable=False, server_default="76cc29acb8008c68b105cf655d34de0b1f7bc0215eaae6bbc83173d6d3f7b987")) 20 | batch_op.alter_column('nostr_event_id', 21 | existing_type=sa.VARCHAR(length=64), 22 | nullable=True) 23 | 24 | def downgrade(): 25 | with op.batch_alter_table('badges', schema=None) as batch_op: 26 | batch_op.alter_column('nostr_event_id', 27 | existing_type=sa.VARCHAR(length=64), 28 | nullable=False) 29 | batch_op.drop_column('owner_public_key') 30 | -------------------------------------------------------------------------------- /api/migrations/versions/00b5877a8e77_add_user_email.py: -------------------------------------------------------------------------------- 1 | """Add user email. 2 | 3 | Revision ID: 00b5877a8e77 4 | Revises: d711e375a2ec 5 | Create Date: 2022-10-21 09:06:00.501848 6 | 7 | """ 8 | from alembic import op 9 | import sqlalchemy as sa 10 | 11 | 12 | # revision identifiers, used by Alembic. 13 | revision = '00b5877a8e77' 14 | down_revision = 'd711e375a2ec' 15 | branch_labels = None 16 | depends_on = None 17 | 18 | 19 | def upgrade(): 20 | # ### commands auto generated by Alembic - please adjust! ### 21 | op.add_column('users', sa.Column('email', sa.String(length=64), nullable=True)) 22 | op.add_column('users', sa.Column('email_verified', sa.Boolean(), nullable=False, server_default="false")) 23 | op.create_index(op.f('ix_users_email'), 'users', ['email'], unique=True) 24 | # ### end Alembic commands ### 25 | 26 | 27 | def downgrade(): 28 | # ### commands auto generated by Alembic - please adjust! ### 29 | op.drop_index(op.f('ix_users_email'), table_name='users') 30 | op.drop_column('users', 'email_verified') 31 | op.drop_column('users', 'email') 32 | # ### end Alembic commands ### 33 | -------------------------------------------------------------------------------- /api/migrations/versions/5b918d4f5903_user_migration.py: -------------------------------------------------------------------------------- 1 | """User migration. 2 | 3 | Revision ID: 5b918d4f5903 4 | Revises: e90cd0b46e69 5 | Create Date: 2023-10-03 10:50:56.342560 6 | 7 | """ 8 | from alembic import op 9 | import sqlalchemy as sa 10 | 11 | 12 | # revision identifiers, used by Alembic. 13 | revision = '5b918d4f5903' 14 | down_revision = 'e90cd0b46e69' 15 | branch_labels = None 16 | depends_on = None 17 | 18 | 19 | def upgrade(): 20 | # ### commands auto generated by Alembic - please adjust! ### 21 | with op.batch_alter_table('users', schema=None) as batch_op: 22 | batch_op.add_column(sa.Column('migrated_at', sa.DateTime(), nullable=True)) 23 | batch_op.add_column(sa.Column('migrated_to_user_id', sa.Integer(), nullable=True)) 24 | 25 | # ### end Alembic commands ### 26 | 27 | 28 | def downgrade(): 29 | # ### commands auto generated by Alembic - please adjust! ### 30 | with op.batch_alter_table('users', schema=None) as batch_op: 31 | batch_op.drop_column('migrated_to_user_id') 32 | batch_op.drop_column('migrated_at') 33 | 34 | # ### end Alembic commands ### 35 | -------------------------------------------------------------------------------- /api/migrations/versions/4a22bfdccc90_add_auctions_to_order.py: -------------------------------------------------------------------------------- 1 | """Add auctions to Order. 2 | 3 | Revision ID: 4a22bfdccc90 4 | Revises: 0387087d8cfb 5 | Create Date: 2023-06-20 13:53:37.651003 6 | 7 | """ 8 | from alembic import op 9 | import sqlalchemy as sa 10 | 11 | 12 | # revision identifiers, used by Alembic. 13 | revision = '4a22bfdccc90' 14 | down_revision = '0387087d8cfb' 15 | branch_labels = None 16 | depends_on = None 17 | 18 | 19 | def upgrade(): 20 | # ### commands auto generated by Alembic - please adjust! ### 21 | with op.batch_alter_table('order_items', schema=None) as batch_op: 22 | batch_op.add_column(sa.Column('auction_id', sa.Integer(), nullable=True)) 23 | batch_op.create_foreign_key(None, 'auctions', ['auction_id'], ['id']) 24 | 25 | # ### end Alembic commands ### 26 | 27 | 28 | def downgrade(): 29 | # ### commands auto generated by Alembic - please adjust! ### 30 | with op.batch_alter_table('order_items', schema=None) as batch_op: 31 | batch_op.drop_constraint(None, type_='foreignkey') 32 | batch_op.drop_column('auction_id') 33 | 34 | # ### end Alembic commands ### 35 | -------------------------------------------------------------------------------- /web/backoffice/src/lib/components/DateFormatter.svelte: -------------------------------------------------------------------------------- 1 | 7 | 8 | 14 | 15 | 16 | {#if date} 17 | {#if style === DateStyle.Long} 18 | {date.toLocaleString('default', { month: 'long' })} {date.getDate()}, {date.getHours()}:{date.getMinutes().toString().padStart(2, "0")} 19 | {:else if style === DateStyle.Short} 20 | {date.toLocaleString('default', { month: 'short' })} {date.getDate()} 21 | {#if date.getFullYear() !== new Date().getFullYear()} 22 | {date.getFullYear()} 23 | {/if} 24 | {date.getHours()}:{date.getMinutes().toString().padStart(2, "0")} 25 | {/if} 26 | {/if} 27 | 28 | -------------------------------------------------------------------------------- /web/frontoffice/src/lib/components/DateFormatter.svelte: -------------------------------------------------------------------------------- 1 | 7 | 8 | 14 | 15 | 16 | {#if date} 17 | {#if style === DateStyle.Long} 18 | {date.toLocaleString('default', { month: 'long' })} {date.getDate()}, {date.getHours()}:{date.getMinutes().toString().padStart(2, "0")} 19 | {:else if style === DateStyle.Short} 20 | {date.toLocaleString('default', { month: 'short' })} {date.getDate()} 21 | {#if date.getFullYear() !== new Date().getFullYear()} 22 | {date.getFullYear()} 23 | {/if} 24 | {date.getHours()}:{date.getMinutes().toString().padStart(2, "0")} 25 | {/if} 26 | {/if} 27 | 28 | -------------------------------------------------------------------------------- /api/migrations/versions/4ff050ac2527_store_badge_purchase_info.py: -------------------------------------------------------------------------------- 1 | """Store badge purchase info. 2 | 3 | Revision ID: 4ff050ac2527 4 | Revises: 7bfdc024cc59 5 | Create Date: 2024-01-23 08:19:43.372755 6 | 7 | """ 8 | from alembic import op 9 | import sqlalchemy as sa 10 | 11 | 12 | # revision identifiers, used by Alembic. 13 | revision = '4ff050ac2527' 14 | down_revision = '7bfdc024cc59' 15 | branch_labels = None 16 | depends_on = None 17 | 18 | 19 | def upgrade(): 20 | # ### commands auto generated by Alembic - please adjust! ### 21 | with op.batch_alter_table('badges', schema=None) as batch_op: 22 | batch_op.add_column(sa.Column('stall_id', sa.String(length=64), nullable=True)) 23 | batch_op.add_column(sa.Column('listing_uuid', sa.String(length=36), nullable=True)) 24 | 25 | # ### end Alembic commands ### 26 | 27 | 28 | def downgrade(): 29 | # ### commands auto generated by Alembic - please adjust! ### 30 | with op.batch_alter_table('badges', schema=None) as batch_op: 31 | batch_op.drop_column('listing_uuid') 32 | batch_op.drop_column('stall_id') 33 | 34 | # ### end Alembic commands ### 35 | -------------------------------------------------------------------------------- /web/shared/src/lib/components/pagebuilder/lexical-editor/images/icons/type-h6.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /api/migrations/versions/26bef93a849b_allow_items_with_infinite_quantity.py: -------------------------------------------------------------------------------- 1 | """Allow items with infinite quantity. 2 | 3 | Revision ID: 26bef93a849b 4 | Revises: 906f050d11ff 5 | Create Date: 2023-10-13 10:03:14.942223 6 | 7 | """ 8 | from alembic import op 9 | import sqlalchemy as sa 10 | 11 | 12 | # revision identifiers, used by Alembic. 13 | revision = '26bef93a849b' 14 | down_revision = '906f050d11ff' 15 | branch_labels = None 16 | depends_on = None 17 | 18 | 19 | def upgrade(): 20 | # ### commands auto generated by Alembic - please adjust! ### 21 | with op.batch_alter_table('listings', schema=None) as batch_op: 22 | batch_op.alter_column('available_quantity', 23 | existing_type=sa.INTEGER(), 24 | nullable=True) 25 | 26 | # ### end Alembic commands ### 27 | 28 | 29 | def downgrade(): 30 | # ### commands auto generated by Alembic - please adjust! ### 31 | with op.batch_alter_table('listings', schema=None) as batch_op: 32 | batch_op.alter_column('available_quantity', 33 | existing_type=sa.INTEGER(), 34 | nullable=False) 35 | 36 | # ### end Alembic commands ### 37 | -------------------------------------------------------------------------------- /api/migrations/versions/e1fdec1dded2_alter_auction_final_flow.py: -------------------------------------------------------------------------------- 1 | """Alter auction final flow. 2 | 3 | Revision ID: e1fdec1dded2 4 | Revises: d940f3567a1c 5 | Create Date: 2022-10-05 14:37:37.642179 6 | 7 | """ 8 | from alembic import op 9 | import sqlalchemy as sa 10 | 11 | 12 | # revision identifiers, used by Alembic. 13 | revision = 'e1fdec1dded2' 14 | down_revision = '4586f6282d0b' 15 | branch_labels = None 16 | depends_on = None 17 | 18 | 19 | def upgrade(): 20 | # ### commands auto generated by Alembic - please adjust! ### 21 | op.add_column('auctions', sa.Column('has_winner', sa.Boolean(), nullable=True)) 22 | op.alter_column('sales', 'contribution_payment_request', 23 | existing_type=sa.VARCHAR(length=512), 24 | nullable=True) 25 | # ### end Alembic commands ### 26 | 27 | 28 | def downgrade(): 29 | # ### commands auto generated by Alembic - please adjust! ### 30 | op.alter_column('sales', 'contribution_payment_request', 31 | existing_type=sa.VARCHAR(length=512), 32 | nullable=False) 33 | op.drop_column('auctions', 'has_winner') 34 | # ### end Alembic commands ### 35 | -------------------------------------------------------------------------------- /api/migrations/versions/fcecd5eab28d_store_bid_event_id.py: -------------------------------------------------------------------------------- 1 | """Store bid event ID. 2 | 3 | Revision ID: fcecd5eab28d 4 | Revises: 4a22bfdccc90 5 | Create Date: 2023-06-21 10:13:52.341555 6 | 7 | """ 8 | from alembic import op 9 | import sqlalchemy as sa 10 | 11 | 12 | # revision identifiers, used by Alembic. 13 | revision = 'fcecd5eab28d' 14 | down_revision = '4a22bfdccc90' 15 | branch_labels = None 16 | depends_on = None 17 | 18 | 19 | def upgrade(): 20 | # ### commands auto generated by Alembic - please adjust! ### 21 | with op.batch_alter_table('bids', schema=None) as batch_op: 22 | batch_op.add_column(sa.Column('nostr_event_id', sa.String(length=64), nullable=True)) 23 | batch_op.create_index(batch_op.f('ix_bids_nostr_event_id'), ['nostr_event_id'], unique=True) 24 | 25 | # ### end Alembic commands ### 26 | 27 | 28 | def downgrade(): 29 | # ### commands auto generated by Alembic - please adjust! ### 30 | with op.batch_alter_table('bids', schema=None) as batch_op: 31 | batch_op.drop_index(batch_op.f('ix_bids_nostr_event_id')) 32 | batch_op.drop_column('nostr_event_id') 33 | 34 | # ### end Alembic commands ### 35 | -------------------------------------------------------------------------------- /api/migrations/versions/0d4d373978f2_deal_with_duplicate_keys.py: -------------------------------------------------------------------------------- 1 | """Deal with duplicate keys. 2 | 3 | Revision ID: 0d4d373978f2 4 | Revises: 53cbfe6a65f6 5 | Create Date: 2023-04-10 19:44:29.716400 6 | 7 | """ 8 | from alembic import op 9 | import sqlalchemy as sa 10 | 11 | # revision identifiers, used by Alembic. 12 | revision = '0d4d373978f2' 13 | down_revision = '53cbfe6a65f6' 14 | branch_labels = None 15 | depends_on = None 16 | 17 | def upgrade(): 18 | # ### commands auto generated by Alembic - please adjust! ### 19 | with op.batch_alter_table('users', schema=None) as batch_op: 20 | batch_op.drop_index('ix_users_new_lnauth_key') 21 | batch_op.create_index(batch_op.f('ix_users_new_lnauth_key'), ['new_lnauth_key'], unique=False) 22 | 23 | # ### end Alembic commands ### 24 | 25 | def downgrade(): 26 | # ### commands auto generated by Alembic - please adjust! ### 27 | with op.batch_alter_table('users', schema=None) as batch_op: 28 | batch_op.drop_index(batch_op.f('ix_users_new_lnauth_key')) 29 | batch_op.create_index('ix_users_new_lnauth_key', ['new_lnauth_key'], unique=True) 30 | 31 | # ### end Alembic commands ### 32 | -------------------------------------------------------------------------------- /api/migrations/versions/4c6c784e30e1_nostr_stalls.py: -------------------------------------------------------------------------------- 1 | """Nostr stalls. 2 | 3 | Revision ID: 4c6c784e30e1 4 | Revises: f0ccfd30d79e 5 | Create Date: 2023-04-20 15:21:35.704877 6 | 7 | """ 8 | from alembic import op 9 | import sqlalchemy as sa 10 | 11 | 12 | # revision identifiers, used by Alembic. 13 | revision = '4c6c784e30e1' 14 | down_revision = 'f0ccfd30d79e' 15 | branch_labels = None 16 | depends_on = None 17 | 18 | 19 | def upgrade(): 20 | # ### commands auto generated by Alembic - please adjust! ### 21 | with op.batch_alter_table('users', schema=None) as batch_op: 22 | batch_op.add_column(sa.Column('stall_private_key', sa.String(length=64), nullable=True)) 23 | batch_op.create_index(batch_op.f('ix_users_stall_private_key'), ['stall_private_key'], unique=True) 24 | 25 | # ### end Alembic commands ### 26 | 27 | 28 | def downgrade(): 29 | # ### commands auto generated by Alembic - please adjust! ### 30 | with op.batch_alter_table('users', schema=None) as batch_op: 31 | batch_op.drop_index(batch_op.f('ix_users_stall_private_key')) 32 | batch_op.drop_column('stall_private_key') 33 | 34 | # ### end Alembic commands ### 35 | -------------------------------------------------------------------------------- /api/migrations/versions/8662155d4e64_bids_don_t_need_lightning_anymore.py: -------------------------------------------------------------------------------- 1 | """Bids don't need Lightning anymore. 2 | 3 | Revision ID: 8662155d4e64 4 | Revises: 87ab83c414e6 5 | Create Date: 2023-07-29 10:20:14.429560 6 | 7 | """ 8 | from alembic import op 9 | import sqlalchemy as sa 10 | 11 | 12 | # revision identifiers, used by Alembic. 13 | revision = '8662155d4e64' 14 | down_revision = '87ab83c414e6' 15 | branch_labels = None 16 | depends_on = None 17 | 18 | 19 | def upgrade(): 20 | # ### commands auto generated by Alembic - please adjust! ### 21 | with op.batch_alter_table('bids', schema=None) as batch_op: 22 | batch_op.drop_index('ix_bids_payment_request') 23 | batch_op.drop_column('payment_request') 24 | 25 | # ### end Alembic commands ### 26 | 27 | 28 | def downgrade(): 29 | # ### commands auto generated by Alembic - please adjust! ### 30 | with op.batch_alter_table('bids', schema=None) as batch_op: 31 | batch_op.add_column(sa.Column('payment_request', sa.VARCHAR(length=512), autoincrement=False, nullable=True)) 32 | batch_op.create_index('ix_bids_payment_request', ['payment_request'], unique=False) 33 | 34 | # ### end Alembic commands ### 35 | -------------------------------------------------------------------------------- /api/migrations/versions/7cef5f311cbb_make_duration_hours_into_a_float.py: -------------------------------------------------------------------------------- 1 | """Make duration_hours into a float. 2 | 3 | Revision ID: 7cef5f311cbb 4 | Revises: 702d020df9ed 5 | Create Date: 2022-05-19 16:16:05.372448 6 | 7 | """ 8 | from alembic import op 9 | import sqlalchemy as sa 10 | 11 | 12 | # revision identifiers, used by Alembic. 13 | revision = '7cef5f311cbb' 14 | down_revision = '702d020df9ed' 15 | branch_labels = None 16 | depends_on = None 17 | 18 | 19 | def upgrade(): 20 | # ### commands auto generated by Alembic - please adjust! ### 21 | op.alter_column('auctions', 'duration_hours', 22 | existing_type=sa.INTEGER(), 23 | type_=sa.Float(), 24 | existing_nullable=False, 25 | existing_server_default=sa.text('0')) 26 | # ### end Alembic commands ### 27 | 28 | 29 | def downgrade(): 30 | # ### commands auto generated by Alembic - please adjust! ### 31 | op.alter_column('auctions', 'duration_hours', 32 | existing_type=sa.Float(), 33 | type_=sa.INTEGER(), 34 | existing_nullable=False, 35 | existing_server_default=sa.text('0')) 36 | # ### end Alembic commands ### 37 | -------------------------------------------------------------------------------- /api/migrations/versions/4ba6c5d104b3_store_stall_nostr_event_id.py: -------------------------------------------------------------------------------- 1 | """Store stall nostr event ID. 2 | 3 | Revision ID: 4ba6c5d104b3 4 | Revises: 3e2210c258eb 5 | Create Date: 2023-08-15 14:36:10.113932 6 | 7 | """ 8 | from alembic import op 9 | import sqlalchemy as sa 10 | 11 | 12 | # revision identifiers, used by Alembic. 13 | revision = '4ba6c5d104b3' 14 | down_revision = '3e2210c258eb' 15 | branch_labels = None 16 | depends_on = None 17 | 18 | 19 | def upgrade(): 20 | # ### commands auto generated by Alembic - please adjust! ### 21 | with op.batch_alter_table('users', schema=None) as batch_op: 22 | batch_op.add_column(sa.Column('stall_nostr_event_id', sa.String(length=64), nullable=True)) 23 | batch_op.create_index(batch_op.f('ix_users_stall_nostr_event_id'), ['stall_nostr_event_id'], unique=True) 24 | 25 | # ### end Alembic commands ### 26 | 27 | 28 | def downgrade(): 29 | # ### commands auto generated by Alembic - please adjust! ### 30 | with op.batch_alter_table('users', schema=None) as batch_op: 31 | batch_op.drop_index(batch_op.f('ix_users_stall_nostr_event_id')) 32 | batch_op.drop_column('stall_nostr_event_id') 33 | 34 | # ### end Alembic commands ### 35 | -------------------------------------------------------------------------------- /api/migrations/versions/8d076a2b6337_add_telegram_username.py: -------------------------------------------------------------------------------- 1 | """Add telegram username. 2 | 3 | Revision ID: 8d076a2b6337 4 | Revises: 526dd4c581ca 5 | Create Date: 2022-10-28 08:42:29.373028 6 | 7 | """ 8 | from alembic import op 9 | import sqlalchemy as sa 10 | 11 | 12 | # revision identifiers, used by Alembic. 13 | revision = '8d076a2b6337' 14 | down_revision = '526dd4c581ca' 15 | branch_labels = None 16 | depends_on = None 17 | 18 | 19 | def upgrade(): 20 | # ### commands auto generated by Alembic - please adjust! ### 21 | op.add_column('users', sa.Column('telegram_username', sa.String(length=64), nullable=True)) 22 | op.add_column('users', sa.Column('telegram_username_verified', sa.Boolean(), nullable=False, server_default="false")) 23 | op.create_index(op.f('ix_users_telegram_username'), 'users', ['telegram_username'], unique=True) 24 | # ### end Alembic commands ### 25 | 26 | 27 | def downgrade(): 28 | # ### commands auto generated by Alembic - please adjust! ### 29 | op.drop_index(op.f('ix_users_telegram_username'), table_name='users') 30 | op.drop_column('users', 'telegram_username_verified') 31 | op.drop_column('users', 'telegram_username') 32 | # ### end Alembic commands ### 33 | -------------------------------------------------------------------------------- /api/migrations/versions/49e0b6e975b1_increase_order_uuid_size.py: -------------------------------------------------------------------------------- 1 | """Increase order UUID size. 2 | 3 | Revision ID: 49e0b6e975b1 4 | Revises: b8f9a7b65af3 5 | Create Date: 2024-02-24 08:50:49.366020 6 | 7 | """ 8 | from alembic import op 9 | import sqlalchemy as sa 10 | 11 | 12 | # revision identifiers, used by Alembic. 13 | revision = '49e0b6e975b1' 14 | down_revision = 'b8f9a7b65af3' 15 | branch_labels = None 16 | depends_on = None 17 | 18 | 19 | def upgrade(): 20 | # ### commands auto generated by Alembic - please adjust! ### 21 | with op.batch_alter_table('orders', schema=None) as batch_op: 22 | batch_op.alter_column('uuid', 23 | existing_type=sa.VARCHAR(length=36), 24 | type_=sa.String(length=72), 25 | existing_nullable=False) 26 | 27 | # ### end Alembic commands ### 28 | 29 | 30 | def downgrade(): 31 | # ### commands auto generated by Alembic - please adjust! ### 32 | with op.batch_alter_table('orders', schema=None) as batch_op: 33 | batch_op.alter_column('uuid', 34 | existing_type=sa.String(length=72), 35 | type_=sa.VARCHAR(length=36), 36 | existing_nullable=False) 37 | 38 | # ### end Alembic commands ### 39 | -------------------------------------------------------------------------------- /api/migrations/versions/03d388ba77ea_add_extra_checks_for_verification_phrase.py: -------------------------------------------------------------------------------- 1 | """Add extra checks for verification phrase. 2 | 3 | Revision ID: 03d388ba77ea 4 | Revises: 1a2cb89c865c 5 | Create Date: 2023-02-23 12:39:29.609692 6 | 7 | """ 8 | from alembic import op 9 | import sqlalchemy as sa 10 | 11 | 12 | # revision identifiers, used by Alembic. 13 | revision = '03d388ba77ea' 14 | down_revision = '1a2cb89c865c' 15 | branch_labels = None 16 | depends_on = None 17 | 18 | 19 | def upgrade(): 20 | # ### commands auto generated by Alembic - please adjust! ### 21 | with op.batch_alter_table('nostr_auth', schema=None) as batch_op: 22 | batch_op.add_column(sa.Column('verification_phrase_sent_at', sa.DateTime(), nullable=True)) 23 | batch_op.add_column(sa.Column('verification_phrase_check_counter', sa.Integer(), nullable=False)) 24 | 25 | # ### end Alembic commands ### 26 | 27 | 28 | def downgrade(): 29 | # ### commands auto generated by Alembic - please adjust! ### 30 | with op.batch_alter_table('nostr_auth', schema=None) as batch_op: 31 | batch_op.drop_column('verification_phrase_check_counter') 32 | batch_op.drop_column('verification_phrase_sent_at') 33 | 34 | # ### end Alembic commands ### 35 | -------------------------------------------------------------------------------- /api/migrations/versions/0387087d8cfb_save_bidder_pubkey.py: -------------------------------------------------------------------------------- 1 | """Save bidder pubkey. 2 | 3 | Revision ID: 0387087d8cfb 4 | Revises: e3e271835296 5 | Create Date: 2023-06-16 11:45:35.908510 6 | 7 | """ 8 | from alembic import op 9 | import sqlalchemy as sa 10 | 11 | 12 | # revision identifiers, used by Alembic. 13 | revision = '0387087d8cfb' 14 | down_revision = 'e3e271835296' 15 | branch_labels = None 16 | depends_on = None 17 | 18 | 19 | def upgrade(): 20 | # ### commands auto generated by Alembic - please adjust! ### 21 | with op.batch_alter_table('bids', schema=None) as batch_op: 22 | batch_op.add_column(sa.Column('buyer_nostr_public_key', sa.String(length=64), nullable=True)) 23 | batch_op.alter_column('buyer_id', 24 | existing_type=sa.INTEGER(), 25 | nullable=True) 26 | 27 | # ### end Alembic commands ### 28 | 29 | 30 | def downgrade(): 31 | # ### commands auto generated by Alembic - please adjust! ### 32 | with op.batch_alter_table('bids', schema=None) as batch_op: 33 | batch_op.alter_column('buyer_id', 34 | existing_type=sa.INTEGER(), 35 | nullable=False) 36 | batch_op.drop_column('buyer_nostr_public_key') 37 | 38 | # ### end Alembic commands ### 39 | -------------------------------------------------------------------------------- /web/shared/src/lib/components/pagebuilder/ProductCardCTA.svelte: -------------------------------------------------------------------------------- 1 | 5 | 6 | 19 | --------------------------------------------------------------------------------