Skip to content

Commit

Permalink
Update pricing page to reflect additional plans
Browse files Browse the repository at this point in the history
  • Loading branch information
StevenWeathers committed Mar 30, 2024
1 parent 39daa6b commit 750819b
Show file tree
Hide file tree
Showing 12 changed files with 641 additions and 204 deletions.
18 changes: 16 additions & 2 deletions internal/config/config.go
Original file line number Diff line number Diff line change
Expand Up @@ -87,10 +87,24 @@ func InitConfig(logger *otelzap.Logger) Config {
viper.SetDefault("config.require_teams", false)
viper.SetDefault("config.subscriptions_enabled", false)

viper.SetDefault("subscription.checkout_link", "")
viper.SetDefault("subscription.manage_link", "")
viper.SetDefault("subscription.account_secret", "")
viper.SetDefault("subscription.webhook_secret", "")
viper.SetDefault("subscription.manage_link", "https://billing.stripe.com/p/login/5kA5lKeb7eU9bp6cMM")
viper.SetDefault("subscription.individual.enabled", true)
viper.SetDefault("subscription.individual.month_price", "5")
viper.SetDefault("subscription.individual.year_price", "50")
viper.SetDefault("subscription.individual.month_checkout_link", "https://buy.stripe.com/7sIcP8gdhc3nc6YeUU")
viper.SetDefault("subscription.individual.year_checkout_link", "https://buy.stripe.com/14kcP8e590kFb2UdQR")
viper.SetDefault("subscription.team.enabled", false)
viper.SetDefault("subscription.team.month_price", "20")
viper.SetDefault("subscription.team.year_price", "200")
viper.SetDefault("subscription.team.month_checkout_link", "https://buy.stripe.com/28o6qK5yD4AV3As5ks")
viper.SetDefault("subscription.team.year_checkout_link", "https://buy.stripe.com/aEUg1kaSX4AV7QI14d")
viper.SetDefault("subscription.organization.enabled", false)
viper.SetDefault("subscription.organization.month_price", "50")
viper.SetDefault("subscription.organization.year_price", "500")
viper.SetDefault("subscription.organization.month_checkout_link", "https://buy.stripe.com/8wM6qK2mr0kF5IA8wC")
viper.SetDefault("subscription.organization.year_checkout_link", "https://buy.stripe.com/eVa02m2mr7N74EwcMT")

viper.SetDefault("admin.email", "")

Expand Down
11 changes: 3 additions & 8 deletions internal/config/types.go
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
package config

import "github.com/StevenWeathers/thunderdome-planning-poker/thunderdome"

type Config struct {
Http
Analytics
Expand All @@ -10,7 +12,7 @@ type Config struct {
Config AppConfig
Feature
Auth
Subscription
Subscription thunderdome.SubscriptionConfig
}

type Http struct {
Expand Down Expand Up @@ -124,10 +126,3 @@ type AuthLdap struct {
MailAttr string `mapstructure:"mail_attr"`
CnAttr string `mapstructure:"cn_attr"`
}

type Subscription struct {
CheckoutLink string `mapstructure:"checkout_link"`
ManageLink string `mapstructure:"manage_link"`
AccountSecret string `mapstructure:"account_secret"`
WebhookSecret string `mapstructure:"webhook_secret"`
}
3 changes: 1 addition & 2 deletions main.go
Original file line number Diff line number Diff line change
Expand Up @@ -231,8 +231,7 @@ func main() {
FeatureStoryboard: c.Feature.Storyboard,
RequireTeams: c.Config.RequireTeams,
SubscriptionsEnabled: c.Config.SubscriptionsEnabled,
SubscriptionCheckoutLink: c.Subscription.CheckoutLink,
SubscriptionManageLink: c.Subscription.ManageLink,
Subscription: c.Subscription,
RepoURL: repoURL,
},
},
Expand Down
22 changes: 19 additions & 3 deletions thunderdome/app.go
Original file line number Diff line number Diff line change
@@ -1,5 +1,22 @@
package thunderdome

type SubscriptionPlanConfig struct {
Enabled bool `mapstructure:"enabled"`
MonthPrice string `mapstructure:"month_price"`
YearPrice string `mapstructure:"year_price"`
MonthCheckoutLink string `mapstructure:"month_checkout_link"`
YearCheckoutLink string `mapstructure:"year_checkout_link"`
}

type SubscriptionConfig struct {
ManageLink string `mapstructure:"manage_link"`
AccountSecret string `mapstructure:"account_secret" json:"-"`
WebhookSecret string `mapstructure:"webhook_secret" json:"-"`
Individual SubscriptionPlanConfig `mapstructure:"individual"`
Team SubscriptionPlanConfig `mapstructure:"team"`
Organization SubscriptionPlanConfig `mapstructure:"organization"`
}

type AppConfig struct {
AllowedPointValues []string
DefaultPointValues []string
Expand Down Expand Up @@ -29,10 +46,9 @@ type AppConfig struct {
FeatureRetro bool
FeatureStoryboard bool
RequireTeams bool
SubscriptionsEnabled bool
SubscriptionCheckoutLink string
SubscriptionManageLink string
RepoURL string
SubscriptionsEnabled bool
Subscription SubscriptionConfig
}

type UIConfig struct {
Expand Down
16 changes: 16 additions & 0 deletions ui/src/components/icons/ArrowRight.svelte
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
<script lang="ts">
let klass = '';
export { klass as class };
</script>

<svg
fill="none"
stroke="currentColor"
stroke-linecap="round"
stroke-linejoin="round"
stroke-width="2"
class="w-4 h-4 ml-auto {klass}"
viewBox="0 0 24 24"
>
<path d="M5 12h14M12 5l7 7-7 7"></path>
</svg>
9 changes: 9 additions & 0 deletions ui/src/components/pricing/Checkmark.svelte
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
<script lang="ts">
import CheckCircleIcon from '../icons/CheckCircleIcon.svelte';
</script>

<span
class="inline-flex items-center justify-center text-lime-500 dark:text-lime-400 rounded-full flex-shrink-0"
>
<CheckCircleIcon />
</span>
7 changes: 7 additions & 0 deletions ui/src/components/pricing/Crossmark.svelte
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
<script lang="ts">
import CloseIcon from '../icons/CloseIcon.svelte';
</script>

<span class="text-gray-500 dark:text-gray-400">
<CloseIcon />
</span>
60 changes: 60 additions & 0 deletions ui/src/components/pricing/PayPeriodToggle.svelte
Original file line number Diff line number Diff line change
@@ -0,0 +1,60 @@
<script lang="ts">
export let selectedPaymentPeriod = 'month';
export let togglePaymentPeriod = () => {};
</script>

<style>
.toggle {
@apply relative;
@apply whitespace-nowrap;
@apply rounded-md;
@apply py-2;
@apply px-6;
@apply text-sm;
@apply font-medium;
@apply border;
@apply border-transparent;
@apply text-violet-200;
}
.toggle:hover {
@apply bg-violet-800;
}
.toggle:focus {
@apply z-10;
@apply outline-none;
@apply ring-2;
@apply ring-white;
@apply ring-offset-2;
@apply ring-offset-violet-700;
}
.active {
@apply border-violet-700;
@apply bg-white;
@apply text-violet-700;
@apply shadow-sm;
}
.active:hover {
@apply bg-violet-50;
}
</style>

<div class="flex rounded-lg bg-violet-700 p-0.5">
<button
on:click="{togglePaymentPeriod}"
type="button"
class="toggle {selectedPaymentPeriod === 'month' ? 'active' : ''}"
>
Monthly billing
</button>
<button
on:click="{togglePaymentPeriod}"
type="button"
class="toggle ml-0.5 {selectedPaymentPeriod === 'year' ? 'active' : ''}"
>
Yearly billing
</button>
</div>
43 changes: 43 additions & 0 deletions ui/src/components/pricing/SubscribeButton.svelte
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
<script lang="ts">
import { user } from '../../stores.ts';
import { appRoutes } from '../../config';
import ArrowRight from '../icons/ArrowRight.svelte';
export let subscribeLink = '';
export let planEnabled = false;
</script>

<div>
{#if planEnabled}
{#if !$user.name || !$user.rank || $user.rank === 'GUEST'}
<p class="bg-yellow-thunder text-gray-900 p-2 rounded">
<a class="underline font-bold" href="{appRoutes.login}/subscription"
>Login</a
>
or
<a class="underline font-bold" href="{appRoutes.register}/subscription"
>Register</a
> to subscribe
</p>
{:else if $user.subscribed}
<p class="text-lime-500 dark:text-lime-400 p-2 font-bold">
Already subscribed, thank you!
</p>
{:else}
<a
href="{subscribeLink}?prefilled_email={$user.email}&client_reference_id={$user.id}"
class="flex items-center mt-auto text-white bg-indigo-500 border-0 py-2 px-4 w-full focus:outline-none hover:bg-indigo-600 rounded"
>
Subscribe Today
<ArrowRight />
</a>
<p class="text-xs text-gray-500 dark:text-gray-400 mt-3">
Payments processed by Stripe.
</p>
{/if}
{:else}
<p class="text-blue-500 dark:text-cyan-400 p-2 font-bold text-lg">
Coming soon!
</p>
{/if}
</div>
1 change: 1 addition & 0 deletions ui/src/config.ts
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@ const AppConfig =
: {
PathPrefix: '',
DefaultLocale: 'en',
Subscription: {},
};
const {
PathPrefix,
Expand Down
Loading

0 comments on commit 750819b

Please sign in to comment.