forked from sunithvs/jiobase
-
Notifications
You must be signed in to change notification settings - Fork 0
Reversion of Donation Gate commits #1
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Closed
manubhardwaj
wants to merge
13
commits into
deepak4566:main
from
manubhardwaj:feat/remove-donation-gate
Closed
Changes from all commits
Commits
Show all changes
13 commits
Select commit
Hold shift + click to select a range
178155a
Add 7 new blog posts, JSON-LD schema markup across all pages, and sit…
sunithvs f2ec970
Add Terms of Service, Privacy Policy, and legal enforcement
sunithvs bc14209
Fix favicon for Google Search: add ICO, PNG, manifest, and apple-touc…
sunithvs 5a88966
Add non-affiliation disclaimer to homepage footer
sunithvs e1ef28f
Fix footer disclaimer layout - move below flex row
sunithvs 59c33eb
Add client-side validation and detailed error messages for app creati…
sunithvs abb4ce1
Add donation modal with periodic and celebration variants
sunithvs 0406b4a
Enhance caching and URL handling in config and handler modules
sunithvs 7a37e44
Add donation gate component to prompt users before app creation
sunithvs ff8fadf
Add donation gate component to prompt users before app creation
sunithvs 36a0bbc
Add AGPL-3.0-only license to package.json files and create LICENSE file
sunithvs b14a51b
Revert "Add donation gate component to prompt users before app creation"
manubhardwaj 0326965
Revert "Add donation gate component to prompt users before app creation"
manubhardwaj File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
Large diffs are not rendered by default.
Oops, something went wrong.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,143 @@ | ||
| <script lang="ts"> | ||
| type Variant = 'celebration' | 'periodic'; | ||
|
|
||
| let { | ||
| open = $bindable(false), | ||
| variant = 'periodic' as Variant, | ||
| onclose = () => {}, | ||
| }: { open: boolean; variant?: Variant; onclose?: () => void } = $props(); | ||
|
|
||
| function dismiss() { | ||
| open = false; | ||
| onclose(); | ||
| } | ||
|
|
||
| function handleBackdrop(e: MouseEvent) { | ||
| if (e.target === e.currentTarget) dismiss(); | ||
| } | ||
|
|
||
| function handleKeydown(e: KeyboardEvent) { | ||
| if (e.key === 'Escape') dismiss(); | ||
| } | ||
| </script> | ||
|
|
||
| <svelte:window onkeydown={handleKeydown} /> | ||
|
|
||
| {#if open} | ||
| <!-- Backdrop --> | ||
| <!-- svelte-ignore a11y_click_events_have_key_events --> | ||
| <!-- svelte-ignore a11y_no_static_element_interactions --> | ||
| <div | ||
| class="fixed inset-0 z-50 flex items-center justify-center bg-black/60 backdrop-blur-sm p-4 animate-fade-in" | ||
| onclick={handleBackdrop} | ||
| > | ||
| <!-- Modal --> | ||
| <div class="w-full max-w-md animate-scale-in"> | ||
| <div class="glass-card rounded-2xl border border-white/10 p-6 sm:p-8 relative overflow-hidden"> | ||
| <!-- Ambient glow --> | ||
| <div class="absolute -top-20 -right-20 h-40 w-40 rounded-full bg-amber-400/10 blur-3xl"></div> | ||
|
|
||
| <!-- Close button --> | ||
| <button | ||
| onclick={dismiss} | ||
| class="absolute top-4 right-4 text-gray-500 hover:text-white transition" | ||
| aria-label="Close" | ||
| > | ||
| <svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"> | ||
| <path d="M18 6L6 18M6 6l12 12"/> | ||
| </svg> | ||
| </button> | ||
|
|
||
| {#if variant === 'celebration'} | ||
| <!-- Celebration variant --> | ||
| <div class="flex items-center gap-3 mb-4"> | ||
| <div class="flex h-10 w-10 items-center justify-center rounded-xl bg-brand-400/10"> | ||
| <svg width="22" height="22" viewBox="0 0 24 24" fill="none" stroke="#3ecf8e" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"> | ||
| <polyline points="20 6 9 17 4 12"/> | ||
| </svg> | ||
| </div> | ||
| <h3 class="text-lg font-bold text-white">Your app is live!</h3> | ||
| </div> | ||
|
|
||
| <p class="text-sm text-gray-400 leading-relaxed"> | ||
| Traffic is now routing through Cloudflare's edge network. Your users won't even notice a difference — except that everything works now. | ||
| </p> | ||
|
|
||
| <div class="mt-5 rounded-xl border border-amber-400/10 bg-amber-400/5 p-4"> | ||
| <p class="text-sm text-gray-300 leading-relaxed"> | ||
| Hey, I'm <span class="font-semibold text-white">Sunith</span> — I built JioBase because the Supabase block broke my own app and I knew other devs were stuck too. It's free because no one should pay to fix someone else's problem. | ||
| </p> | ||
| <p class="mt-3 text-sm text-gray-400 leading-relaxed"> | ||
| But Cloudflare bills are real. If JioBase just saved your production app, <span class="text-amber-300 font-medium">a $3 coffee helps me keep the lights on</span> for everyone. | ||
| </p> | ||
| </div> | ||
| {:else} | ||
| <!-- Periodic variant --> | ||
| <div class="flex items-center gap-3 mb-4"> | ||
| <div class="flex h-10 w-10 items-center justify-center rounded-xl bg-amber-400/10 text-2xl"> | ||
| ☕ | ||
| </div> | ||
| <h3 class="text-lg font-bold text-white">Quick reality check</h3> | ||
| </div> | ||
|
|
||
| <p class="text-sm text-gray-300 leading-relaxed"> | ||
| JioBase proxies millions of requests for free. Every single request costs me money. | ||
| </p> | ||
|
|
||
| <p class="mt-3 text-sm text-gray-400 leading-relaxed"> | ||
| I'm not a company. I'm <span class="font-semibold text-white">one developer</span> paying Cloudflare bills out of pocket so your Supabase app works in India. | ||
| </p> | ||
|
|
||
| <div class="mt-4 flex items-center gap-3 rounded-lg border border-white/5 bg-white/[0.03] px-4 py-3"> | ||
| <span class="text-2xl">☕</span> | ||
| <p class="text-sm text-gray-300"> | ||
| <span class="text-amber-300 font-semibold">$3</span> = one coffee = JioBase stays free for hundreds of devs | ||
| </p> | ||
| </div> | ||
|
|
||
| <p class="mt-4 text-xs text-gray-500 leading-relaxed"> | ||
| No pressure — but it genuinely helps keep this project alive. | ||
| </p> | ||
| {/if} | ||
|
|
||
| <!-- Buttons --> | ||
| <div class="mt-6 flex flex-col gap-3 sm:flex-row"> | ||
| <a | ||
| href="https://buymeacoffee.com/sunithvs" | ||
| target="_blank" | ||
| rel="noopener" | ||
| class="flex flex-1 items-center justify-center gap-2 rounded-xl bg-amber-400 px-5 py-3 text-sm font-semibold text-black transition hover:bg-amber-300 shadow-lg shadow-amber-400/20" | ||
| > | ||
| <svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"> | ||
| <path d="M18 8h1a4 4 0 0 1 0 8h-1M2 8h16v9a4 4 0 0 1-4 4H6a4 4 0 0 1-4-4V8zM6 1v3M10 1v3M14 1v3"/> | ||
| </svg> | ||
| {variant === 'celebration' ? 'Buy me a coffee' : 'Support JioBase'} | ||
| </a> | ||
| <button | ||
| onclick={dismiss} | ||
| class="rounded-xl border border-white/10 px-5 py-3 text-sm text-gray-400 transition hover:border-white/20 hover:text-white" | ||
| > | ||
| {variant === 'celebration' ? 'Maybe later' : 'Not now'} | ||
| </button> | ||
| </div> | ||
| </div> | ||
| </div> | ||
| </div> | ||
| {/if} | ||
|
|
||
| <style> | ||
| .animate-fade-in { | ||
| animation: fadeIn 0.2s ease-out; | ||
| } | ||
| .animate-scale-in { | ||
| animation: scaleIn 0.25s ease-out; | ||
| } | ||
| @keyframes fadeIn { | ||
| from { opacity: 0; } | ||
| to { opacity: 1; } | ||
| } | ||
| @keyframes scaleIn { | ||
| from { opacity: 0; transform: scale(0.95); } | ||
| to { opacity: 1; transform: scale(1); } | ||
| } | ||
| </style> | ||
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Suggestion: The global Escape key handler calls the dismiss function unconditionally, so pressing Escape when the modal is not open still triggers the close callback, which can cause parent state to update as if the modal were closed even though it wasn't visible. Guard on the
openflag before dismissing so the handler only runs when the modal is actually shown. [logic error]Severity Level: Major⚠️
Steps of Reproduction ✅
Prompt for AI Agent 🤖