From d80f97ebbf464d72cd60fc01887320147b010ecd Mon Sep 17 00:00:00 2001 From: zafer Date: Mon, 24 Mar 2025 00:39:32 +0200 Subject: [PATCH 1/8] feat: add new Pricing4Live page and update router with new live route; enhance button styles with purple variant --- lib/algora_web/components/ui/button.ex | 2 + lib/algora_web/live/pricing4_live.ex | 1030 ++++++++++++++++++++++++ lib/algora_web/router.ex | 1 + 3 files changed, 1033 insertions(+) create mode 100644 lib/algora_web/live/pricing4_live.ex diff --git a/lib/algora_web/components/ui/button.ex b/lib/algora_web/components/ui/button.ex index 1617a38be..65a5a7724 100644 --- a/lib/algora_web/components/ui/button.ex +++ b/lib/algora_web/components/ui/button.ex @@ -64,6 +64,8 @@ defmodule AlgoraWeb.Components.UI.Button do "bg-primary/50 hover:bg-primary/30 text-foreground border-primary/80 hover:border-primary focus-visible:outline-primary-600 data-[state=open]:bg-primary-500/80 data-[state=open]:outline-primary-600 shadow border", "blue" => "bg-blue-500/50 hover:bg-blue-500/30 text-foreground border-blue-500/80 hover:border-blue-500 focus-visible:outline-blue-600 data-[state=open]:bg-blue-500/80 data-[state=open]:outline-blue-600 shadow border", + "purple" => + "bg-purple-500/50 hover:bg-purple-500/30 text-foreground border-purple-500/80 hover:border-purple-500 focus-visible:outline-purple-600 data-[state=open]:bg-purple-500/80 data-[state=open]:outline-purple-600 shadow border", "destructive" => "bg-destructive/50 hover:bg-destructive/30 text-destructive-foreground border-destructive/80 hover:border-destructive focus-visible:outline-destructive-600 data-[state=open]:bg-destructive-500/80 data-[state=open]:outline-destructive-600 shadow border", "hover:destructive" => diff --git a/lib/algora_web/live/pricing4_live.ex b/lib/algora_web/live/pricing4_live.ex new file mode 100644 index 000000000..fc6c0689c --- /dev/null +++ b/lib/algora_web/live/pricing4_live.ex @@ -0,0 +1,1030 @@ +defmodule AlgoraWeb.Pricing4Live do + @moduledoc false + use AlgoraWeb, :live_view + + alias Algora.PSP.ConnectCountries + alias AlgoraWeb.Components.Footer + alias AlgoraWeb.Components.Header + alias AlgoraWeb.Components.Logos + alias AlgoraWeb.Components.Wordmarks + + defmodule Plan do + @moduledoc false + defstruct [ + :id, + :name, + :description, + :price, + :cta_text, + :cta_url, + :popular, + :previous_tier, + :features, + :footnote + ] + end + + defmodule Feature do + @moduledoc false + defstruct [:name, :detail] + end + + defmodule FaqItem do + @moduledoc false + defstruct [:id, :question, :answer] + end + + @impl true + def render(assigns) do + ~H""" +
+ <%= if @screenshot? do %> +
+ <% else %> + + <% end %> + +
+ +
+
+
+
+
+

+ Simple, transparent pricing +

+

+ For individuals, OSS communities, and open/closed source companies +

+
+
+
+ +
+
+
+

+
+ <.icon name="tabler-wallet" class="h-6 w-6 text-emerald-400" /> Payments +
+

+

+ Fund GitHub issues with USD rewards and pay when work is merged. Set up contracts for ongoing development work. Simple, outcome-based payments. +

+
+
+
+ +
+ <%= for plan <- @plans1 do %> + <.pricing_card1 plan={plan} plans={@plans1} /> + <% end %> +
+ +
+
+
+

+
+ <.icon name="tabler-building-store" class="h-6 w-6 text-purple-400" /> Platform +
+

+

+ Connect with top open source talent, increase project visibility, and hire proven contributors +

+
+
+
+
+ <%= for plan <- @plans2 do %> + <.pricing_card2 plan={plan} plans={@plans2} /> + <% end %> +
+
+
+ + <%!--
+
+
+

+ You're in good company +

+

+ Join hundreds of open source companies that use Algora to accelerate their development +

+
+
+ <.logo_cloud /> +
+
+
+ +
+
+
+

+ See what our customers say +

+

+ Discover how Algora helps founders accelerate development and find top talent +

+
+ +
+
+
+
+ +
+
+
+

+ $15,000 Bounty: Delighted by the Results +

+
+ +
+ We've used Algora extensively at Golem Cloud for our hiring needs and what I have found actually over the course of a few decades of hiring people is that many times someone who is very active in open-source development, these types of engineers often make fantastic additions to a team. + + Through our $15,000 bounty, we got hundreds of GitHub stars, more than 100 new users on our Discord, and some really fantastic Rust engineers. + + The bounty system helps us assess real-world skills instead of just technical challenge problems. It's a great way to find talented developers who deeply understand how your system works. +
+
+
+
+ + John A. De Goes + +
+
John A. De Goes
+
Founder & CEO
+
+
+
+
+
+
Total awarded
+
+ $103,950 +
+
+
+
Bounties completed
+
+ 359 +
+
+
+
Contributors rewarded
+
+ 82 +
+
+
+
+
+
+
+
+
+

+ From Bounty Contributor
To Full-Time Engineer +

+
+ +
+ We were doing bounties on Algora, and this one developer Nick kept solving them. His personality really came through in the GitHub issues and code. We ended up hiring him from that, and it was the easiest hire because we already knew he was great from his contributions. + + That's one massive advantage open source companies have versus closed source. When I talk to young people asking for advice, I specifically tell them to go on Algora and find issues there. You get to show people your work, plus you can point to your contributions as proof of your abilities, and you make money in the meantime. +
+
+
+
+ + Eric Allam + +
+
Eric Allam
+
Founder & CTO
+
+
+ +
+
+
+
Total awarded
+
+ $9,920 +
+
+
+
Bounties completed
+
+ 106 +
+
+
+
Contributors rewarded
+
+ 35 +
+
+
+
+
+
+ +
+
+
+
+
+
--%> + +
+
+

+ Frequently asked questions +

+
+ <%= for item <- @faq_items do %> +
+ + +
+ <% end %> +
+
+
+ +
+
+

+ The open source + Upwork alternative. +

+
+ <.button navigate="/onboarding/org"> + Start your project + + <.button href="https://cal.com/ioannisflo" variant="secondary"> + Request a demo + +
+ <.features_bento /> +
+
+ +
+ +
+
+ """ + end + + @impl true + def mount(params, _session, socket) do + socket = + assign(socket, + screenshot?: not is_nil(params["screenshot"]), + page_title: "Pricing", + plans1: get_plans1(), + plans2: get_plans2(), + faq_items: get_faq_items(), + active_faq: nil + ) + + {:ok, socket} + end + + defp pricing_card1(assigns) do + ~H""" +
+
+
+
+
+

+ {@plan.name} +

+ <%= if @plan.popular do %> + + Most Popular + + <% end %> +
+
+

+ {@plan.description} +

+
+
+
+ <%= case @plan.id do %> + <% :a0 -> %> +
+
+

+ 0% +

+

+ service fee +

+
+
+ <% :a1 -> %> +
+
+

+ 9% +

+

+ service fee +

+
+
+ <% :b0 -> %> +
+
+

+ $599 +

+

+ /mo +

+
+
+ <% :b1 -> %> +
+
+

+ $1,599 +

+

+ /mo +

+
+
+ <% :b2 -> %> +
+
+

+ Custom +

+
+
+ <% end %> +
+
+ <%!-- <.button navigate={@plan.cta_url}> + Get started + --%> +
+
+
+ <%!--
+ <%= case @plan.id do %> + <% 0 -> %> + <% 1 -> %> + Everything in {Enum.at(@plans, 0).name}, plus: + <% 2 -> %> + Everything in {Enum.at(@plans, 1).name}, plus: + <% end %> +
--%> +
    + <%= for feature <- @plan.features do %> +
  • +
    +
    + <.icon name="tabler-check" class="size-5 text-emerald-400" /> +
    + + {Phoenix.HTML.raw(feature.name)} + +
    + <%= if feature.detail do %> +

    {feature.detail}

    + <% end %> +
  • + <% end %> +
+
+
+
+ """ + end + + defp pricing_card2(assigns) do + ~H""" +
+
+
+
+

+ {@plan.name} +

+ <%= if @plan.popular do %> + + Most Popular + + <% end %> +
+
+

+ {@plan.description} +

+
+ <.button navigate={@plan.cta_url} variant="purple" size="xl"> + {@plan.cta_text} + + <%!-- <.button + href="https://github.com/algora-io/console" + rel="noopener" + target="_blank" + variant="secondary" + > + <.icon name="github" class="size-5 mr-2 -ml-1" /> View source code + --%> +
+
+
+
    +
  • +
    + <.icon name="tabler-world" class="size-8 text-purple-400" /> +
    +
    Publish
    +
    + Bounties and contracts on Algora +
    +
  • +
  • +
    + <.icon name="tabler-bolt" class="size-8 text-purple-400" /> +
    +
    Match
    +
    Proven Algora experts
    +
  • +
  • +
    + <.icon name="tabler-briefcase" class="size-8 text-purple-400" /> +
    +
    Hire
    +
    Top 1% OSS engineers
    +
  • + <%= for feature <- @plan.features do %> +
  • +
    +
    + <.icon name="tabler-check" class="size-5 text-purple-400" /> +
    + {Phoenix.HTML.raw(feature.name)} +
    + <%= if feature.detail do %> +

    {feature.detail}

    + <% end %> +
  • + <% end %> +
+
+
+ """ + end + + defp get_plans1 do + [ + %Plan{ + id: :a0, + name: "Receive payments", + description: "Get paid for your open source work", + price: "100%", + cta_text: "Start earning", + cta_url: "/onboarding/dev", + popular: false, + features: [ + %Feature{name: "Keep 100% of your earnings"}, + %Feature{name: "Available in #{ConnectCountries.count()} countries"}, + %Feature{name: "Fast payouts in 2-7 days"} + ] + }, + %Plan{ + id: :a1, + name: "Pay developers", + description: "Reward contributors with Algora", + price: nil, + cta_text: "Create bounties", + cta_url: "/onboarding/dev", + popular: false, + features: [ + %Feature{name: "GitHub bounties and tips"}, + %Feature{name: "Contract work (fixed/hourly)"}, + %Feature{name: "Invoices, payouts, compliance, 1099s"} + ] + } + ] + end + + defp get_plans2 do + [ + %Plan{ + id: :b2, + name: "Looking for more?", + description: "Tailor Algora to your needs", + price: "Custom", + cta_text: "Contact us", + cta_url: "https://cal.com/ioannisflo", + popular: false, + features: [] + # features: [ + # %Feature{name: "Featured on Algora"}, + # %Feature{name: "Access to verified OSS experts (12k+ users)"}, + # %Feature{name: "Instant top matches for your roles"}, + # %Feature{name: "Jobs published to platform & newsletter"}, + # # %Feature{name: "Whitelabel portal (cloud / self-hosted)"}, + # %Feature{name: "Priority placement"}, + # %Feature{name: "24x7x365 premium support"}, + # %Feature{name: "SOC2 compliance"}, + # %Feature{name: "HIPAA available as add-on"} + # # %Feature{name: "Custom Security Questionnaires"} + # ] + } + ] + end + + defp get_faq_items do + [ + %FaqItem{ + id: "platform-fee", + question: "How do the platform fees work?", + answer: + "For organizations, we charge a 19% fee on bounties, which can drop to 7.5% with volume. For individual contributors, you receive 100% of the bounty amount with no fees deducted." + }, + %FaqItem{ + id: "payment-methods", + question: "What payment methods do you support?", + answer: + ~s(We support payments via Stripe for funding bounties. Contributors can receive payments directly to their bank accounts in #{ConnectCountries.count()} countries/regions worldwide.) + }, + %FaqItem{ + id: "payment-process", + question: "How does the payment process work?", + answer: + "There's no upfront payment required for bounties. Organizations can either pay manually after merging pull requests, or save their card with Stripe to enable auto-pay on merge. Manual payments are processed through a secure Stripe hosted checkout page." + }, + %FaqItem{ + id: "invoices-receipts", + question: "Do you provide invoices and receipts?", + answer: + "Yes, users receive an invoice and receipt after each bounty payment. These documents are automatically generated and delivered to your email." + }, + %FaqItem{ + id: "tax-forms", + question: "How are tax forms handled?", + answer: + "We partner with Stripe to file and deliver 1099 forms for your US-based freelancers, simplifying tax compliance for organizations working with US contributors." + }, + %FaqItem{ + id: "payout-time", + question: "How long do payouts take?", + answer: + "Payout timing varies by country, typically ranging from 2-7 business days after a bounty is awarded. Initial payouts for new accounts may take 7-14 days. The exact timing depends on your location, banking system, and account history with Stripe, our payment processor." + }, + %FaqItem{ + id: "minimum-bounty", + question: "Is there a minimum bounty amount?", + answer: + "There's no strict minimum bounty amount. However, bounties with higher values tend to attract more attention and faster solutions from contributors." + }, + %FaqItem{ + id: "enterprise-options", + question: "Do you offer custom enterprise plans?", + answer: + ~s(Yes, for larger organizations with specific needs, we offer custom enterprise plans with additional features, dedicated support, and volume-based pricing. Please schedule a call with a founder to discuss your requirements.) + }, + %FaqItem{ + id: "supported-countries", + question: "Which countries are supported for contributors?", + answer: + ~s(We support contributors from #{ConnectCountries.count()} countries/regions worldwide. You can receive payments regardless of your location as long as you have a bank account in one of our supported countries. See the full list of supported countries.) + } + ] + end + + defp logo_cloud(assigns) do + ~H""" +
+ +
+ """ + end + + defp features_bento(assigns) do + ~H""" +
+
+
+ +
+

Bounties

+

+ Fund Issues +

+

+ Create bounties on your issues to incentivize solutions and attract talented contributors +

+
+
+
+
+
+ +
+

Tips

+

+ Show Appreciation +

+

+ Say thanks with tips to recognize valuable contributions +

+
+
+
+
+
+
+
+
+
+
+ +

+ Merged pull request +

+
+
+
+
+ +

+ Completed payment +

+
+
+
+
+ + + + + + +

+ Transferring funds to contributor +

+
+
+
+
+
+
+

Payments

+

+ Pay When Merged +

+

+ Set up auto-pay to instantly reward contributors as their PRs are merged +

+
+
+
+
+
+ +
+

Pooling

+

+ Fund Together +

+

+ Companies and individuals can pool their money together to fund important issues +

+
+
+
+
+
+ +
+

Payouts

+

+ Fast, Global Payouts +

+

+ Receive payments directly to your bank account from all around the world + <.link + href="https://docs.algora.io/bounties/payments#supported-countries-regions" + class="font-medium text-foreground" + > + ({ConnectCountries.count()} countries/regions supported) + +

+
+
+
+
+
+ +
+

Contracts

+

+ Flexible Engagement +

+

+ Set hourly rates, weekly hours, and payment schedules for ongoing development work. Track progress and manage payments all in one place. +

+
+
+
+
+ """ + end +end diff --git a/lib/algora_web/router.ex b/lib/algora_web/router.ex index cb27dddf8..3e4d6531a 100644 --- a/lib/algora_web/router.ex +++ b/lib/algora_web/router.ex @@ -135,6 +135,7 @@ defmodule AlgoraWeb.Router do live "/onboarding/org", Onboarding.OrgLive live "/onboarding/dev", Onboarding.DevLive live "/pricing", PricingLive + live "/pricing4", Pricing4Live live "/swift", SwiftBountiesLive end From 4e6ec7c599f42ee48da64037820df041427f920f Mon Sep 17 00:00:00 2001 From: zafer Date: Mon, 24 Mar 2025 00:41:45 +0200 Subject: [PATCH 2/8] style: update pricing card layout and styles for improved user interaction and visual consistency --- lib/algora_web/live/pricing4_live.ex | 131 ++++++++++++++------------- 1 file changed, 66 insertions(+), 65 deletions(-) diff --git a/lib/algora_web/live/pricing4_live.ex b/lib/algora_web/live/pricing4_live.ex index fc6c0689c..0c9d453b0 100644 --- a/lib/algora_web/live/pricing4_live.ex +++ b/lib/algora_web/live/pricing4_live.ex @@ -96,7 +96,7 @@ defmodule AlgoraWeb.Pricing4Live do
-
+
<%= for plan <- @plans2 do %> <.pricing_card2 plan={plan} plans={@plans2} /> <% end %> @@ -532,33 +532,33 @@ defmodule AlgoraWeb.Pricing4Live do defp pricing_card2(assigns) do ~H""" -
-
-
-
-

- {@plan.name} -

- <%= if @plan.popular do %> - - Most Popular - - <% end %> +
+
+
+
+
+

+ {@plan.name} +

+ <%= if @plan.popular do %> + + Most Popular + + <% end %> +
-
-

- {@plan.description} -

-
- <.button navigate={@plan.cta_url} variant="purple" size="xl"> - {@plan.cta_text} - - <%!-- <.button +

+ {@plan.description} +

+
+ <.button navigate={@plan.cta_url} variant="purple" size="xl"> + {@plan.cta_text} + + <%!-- <.button href="https://github.com/algora-io/console" rel="noopener" target="_blank" @@ -566,47 +566,48 @@ defmodule AlgoraWeb.Pricing4Live do > <.icon name="github" class="size-5 mr-2 -ml-1" /> View source code --%> +
-
-
-
    -
  • -
    - <.icon name="tabler-world" class="size-8 text-purple-400" /> -
    -
    Publish
    -
    - Bounties and contracts on Algora -
    -
  • -
  • -
    - <.icon name="tabler-bolt" class="size-8 text-purple-400" /> -
    -
    Match
    -
    Proven Algora experts
    -
  • -
  • -
    - <.icon name="tabler-briefcase" class="size-8 text-purple-400" /> -
    -
    Hire
    -
    Top 1% OSS engineers
    -
  • - <%= for feature <- @plan.features do %> -
  • -
    -
    - <.icon name="tabler-check" class="size-5 text-purple-400" /> -
    - {Phoenix.HTML.raw(feature.name)} +
    +
      +
    • +
      + <.icon name="tabler-world" class="size-8 text-purple-400" /> +
      +
      Publish
      +
      + Bounties and contracts on Algora
      - <%= if feature.detail do %> -

      {feature.detail}

      - <% end %>
    • - <% end %> -
    +
  • +
    + <.icon name="tabler-bolt" class="size-8 text-purple-400" /> +
    +
    Match
    +
    Proven Algora experts
    +
  • +
  • +
    + <.icon name="tabler-briefcase" class="size-8 text-purple-400" /> +
    +
    Hire
    +
    Top 1% OSS engineers
    +
  • + <%= for feature <- @plan.features do %> +
  • +
    +
    + <.icon name="tabler-check" class="size-5 text-purple-400" /> +
    + {Phoenix.HTML.raw(feature.name)} +
    + <%= if feature.detail do %> +

    {feature.detail}

    + <% end %> +
  • + <% end %> +
+
""" From 443a0cd7397fadf027486a61b64a8ad88c86c66f Mon Sep 17 00:00:00 2001 From: zafer Date: Mon, 24 Mar 2025 00:45:13 +0200 Subject: [PATCH 3/8] refactor: remove deprecated sections and update pricing card links for enhanced navigation and clarity --- lib/algora_web/live/pricing4_live.ex | 276 +-------------------------- 1 file changed, 8 insertions(+), 268 deletions(-) diff --git a/lib/algora_web/live/pricing4_live.ex b/lib/algora_web/live/pricing4_live.ex index 0c9d453b0..2d0b894b3 100644 --- a/lib/algora_web/live/pricing4_live.ex +++ b/lib/algora_web/live/pricing4_live.ex @@ -104,239 +104,6 @@ defmodule AlgoraWeb.Pricing4Live do
- <%!--
-
-
-

- You're in good company -

-

- Join hundreds of open source companies that use Algora to accelerate their development -

-
-
- <.logo_cloud /> -
-
-
- -
-
-
-

- See what our customers say -

-

- Discover how Algora helps founders accelerate development and find top talent -

-
- -
-
-
-
- -
-
-
-

- $15,000 Bounty: Delighted by the Results -

-
- -
- We've used Algora extensively at Golem Cloud for our hiring needs and what I have found actually over the course of a few decades of hiring people is that many times someone who is very active in open-source development, these types of engineers often make fantastic additions to a team. - - Through our $15,000 bounty, we got hundreds of GitHub stars, more than 100 new users on our Discord, and some really fantastic Rust engineers. - - The bounty system helps us assess real-world skills instead of just technical challenge problems. It's a great way to find talented developers who deeply understand how your system works. -
-
-
-
- - John A. De Goes - -
-
John A. De Goes
-
Founder & CEO
-
-
-
-
-
-
Total awarded
-
- $103,950 -
-
-
-
Bounties completed
-
- 359 -
-
-
-
Contributors rewarded
-
- 82 -
-
-
-
-
-
-
-
-
-

- From Bounty Contributor
To Full-Time Engineer -

-
- -
- We were doing bounties on Algora, and this one developer Nick kept solving them. His personality really came through in the GitHub issues and code. We ended up hiring him from that, and it was the easiest hire because we already knew he was great from his contributions. - - That's one massive advantage open source companies have versus closed source. When I talk to young people asking for advice, I specifically tell them to go on Algora and find issues there. You get to show people your work, plus you can point to your contributions as proof of your abilities, and you make money in the meantime. -
-
-
-
- - Eric Allam - -
-
Eric Allam
-
Founder & CTO
-
-
- -
-
-
-
Total awarded
-
- $9,920 -
-
-
-
Bounties completed
-
- 106 -
-
-
-
Contributors rewarded
-
- 35 -
-
-
-
-
-
- -
-
-
-
-
-
--%> -

@@ -411,7 +178,10 @@ defmodule AlgoraWeb.Pricing4Live do defp pricing_card1(assigns) do ~H""" -
+ <.link + href={@plan.cta_url} + class="group border ring-1 ring-transparent hover:ring-emerald-400 rounded-xl overflow-hidden" + >
- <%!--
- <%= case @plan.id do %> - <% 0 -> %> - <% 1 -> %> - Everything in {Enum.at(@plans, 0).name}, plus: - <% 2 -> %> - Everything in {Enum.at(@plans, 1).name}, plus: - <% end %> -
--%>
    <%= for feature <- @plan.features do %>
  • @@ -526,15 +287,15 @@ defmodule AlgoraWeb.Pricing4Live do
-

+ """ end defp pricing_card2(assigns) do ~H""" -
+
@@ -558,14 +319,6 @@ defmodule AlgoraWeb.Pricing4Live do <.button navigate={@plan.cta_url} variant="purple" size="xl"> {@plan.cta_text} - <%!-- <.button - href="https://github.com/algora-io/console" - rel="noopener" - target="_blank" - variant="secondary" - > - <.icon name="github" class="size-5 mr-2 -ml-1" /> View source code - --%>
@@ -593,19 +346,6 @@ defmodule AlgoraWeb.Pricing4Live do
Hire
Top 1% OSS engineers
- <%= for feature <- @plan.features do %> -
  • -
    -
    - <.icon name="tabler-check" class="size-5 text-purple-400" /> -
    - {Phoenix.HTML.raw(feature.name)} -
    - <%= if feature.detail do %> -

    {feature.detail}

    - <% end %> -
  • - <% end %>
    @@ -635,7 +375,7 @@ defmodule AlgoraWeb.Pricing4Live do description: "Reward contributors with Algora", price: nil, cta_text: "Create bounties", - cta_url: "/onboarding/dev", + cta_url: "/onboarding/org", popular: false, features: [ %Feature{name: "GitHub bounties and tips"}, From d50a4d02655b49b74f9fc0bdb643ab9a7fc2d19f Mon Sep 17 00:00:00 2001 From: zafer Date: Mon, 24 Mar 2025 00:46:01 +0200 Subject: [PATCH 4/8] refactor: remove unused Logos alias and commented-out features in Pricing4Live module for cleaner code --- lib/algora_web/live/pricing4_live.ex | 13 ------------- 1 file changed, 13 deletions(-) diff --git a/lib/algora_web/live/pricing4_live.ex b/lib/algora_web/live/pricing4_live.ex index 2d0b894b3..3f0299b73 100644 --- a/lib/algora_web/live/pricing4_live.ex +++ b/lib/algora_web/live/pricing4_live.ex @@ -5,7 +5,6 @@ defmodule AlgoraWeb.Pricing4Live do alias Algora.PSP.ConnectCountries alias AlgoraWeb.Components.Footer alias AlgoraWeb.Components.Header - alias AlgoraWeb.Components.Logos alias AlgoraWeb.Components.Wordmarks defmodule Plan do @@ -397,18 +396,6 @@ defmodule AlgoraWeb.Pricing4Live do cta_url: "https://cal.com/ioannisflo", popular: false, features: [] - # features: [ - # %Feature{name: "Featured on Algora"}, - # %Feature{name: "Access to verified OSS experts (12k+ users)"}, - # %Feature{name: "Instant top matches for your roles"}, - # %Feature{name: "Jobs published to platform & newsletter"}, - # # %Feature{name: "Whitelabel portal (cloud / self-hosted)"}, - # %Feature{name: "Priority placement"}, - # %Feature{name: "24x7x365 premium support"}, - # %Feature{name: "SOC2 compliance"}, - # %Feature{name: "HIPAA available as add-on"} - # # %Feature{name: "Custom Security Questionnaires"} - # ] } ] end From ab009b19b20d78c752643b9d9bea6f515aab652d Mon Sep 17 00:00:00 2001 From: zafer Date: Mon, 24 Mar 2025 00:53:09 +0200 Subject: [PATCH 5/8] style: enhance button and icon styles in Pricing4Live module with drop shadow for improved visual appeal --- lib/algora_web/live/pricing4_live.ex | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/lib/algora_web/live/pricing4_live.ex b/lib/algora_web/live/pricing4_live.ex index 3f0299b73..d821f3959 100644 --- a/lib/algora_web/live/pricing4_live.ex +++ b/lib/algora_web/live/pricing4_live.ex @@ -315,7 +315,12 @@ defmodule AlgoraWeb.Pricing4Live do {@plan.description}

    - <.button navigate={@plan.cta_url} variant="purple" size="xl"> + <.button + navigate={@plan.cta_url} + variant="purple" + size="xl" + class="drop-shadow-[0_1px_5px_#c084fc80]" + > {@plan.cta_text}
    @@ -323,7 +328,7 @@ defmodule AlgoraWeb.Pricing4Live do
    • -
      +
      <.icon name="tabler-world" class="size-8 text-purple-400" />
      Publish
      @@ -332,14 +337,14 @@ defmodule AlgoraWeb.Pricing4Live do
    • -
      +
      <.icon name="tabler-bolt" class="size-8 text-purple-400" />
      Match
      Proven Algora experts
    • -
      +
      <.icon name="tabler-briefcase" class="size-8 text-purple-400" />
      Hire
      From ec40d4835d448df835a82530550e93cd06204bbc Mon Sep 17 00:00:00 2001 From: zafer Date: Mon, 24 Mar 2025 01:01:42 +0200 Subject: [PATCH 6/8] feat: add calendar contact section to dashboard with enhanced layout and button for team growth engagement --- lib/algora_web/constants.ex | 1 + lib/algora_web/live/org/dashboard_live.ex | 65 ++++++++++++++++++++++- 2 files changed, 65 insertions(+), 1 deletion(-) diff --git a/lib/algora_web/constants.ex b/lib/algora_web/constants.ex index c21946281..d02a668bf 100644 --- a/lib/algora_web/constants.ex +++ b/lib/algora_web/constants.ex @@ -9,6 +9,7 @@ defmodule AlgoraWeb.Constants do youtube_url: "https://www.youtube.com/@algora-io", discord_url: ~p"/discord", github_url: "https://github.com/algora-io", + calendar_url: "https://cal.com/ioannisflo", # TODO: update this to the new repo github_repo_url: "https://github.com/algora-io/tv", github_repo_api_url: "https://api.github.com/repos/algora-io/tv", diff --git a/lib/algora_web/live/org/dashboard_live.ex b/lib/algora_web/live/org/dashboard_live.ex index c1e73e279..5fdcaa5c4 100644 --- a/lib/algora_web/live/org/dashboard_live.ex +++ b/lib/algora_web/live/org/dashboard_live.ex @@ -429,11 +429,74 @@ defmodule AlgoraWeb.Org.DashboardLive do title={"#{@current_org.name} Ecosystem"} subtitle="Help maintain and grow your ecosystem by creating bounties and tips in your dependencies" > -
      +
      {create_bounty(assigns)} {create_tip(assigns)}
      + + <.section> +
      +
      +
      +
      +
      +

      + Growing your team? +

      +
      +
      +

      + You're in the right place. +

      +
      + <.button + navigate={AlgoraWeb.Constants.get(:calendar_url)} + variant="purple" + size="xl" + class="drop-shadow-[0_1px_5px_#c084fc80]" + > + Contact us + +
      +
      +
      +
        +
      • +
        + <.icon name="tabler-world" class="size-8 text-purple-400" /> +
        +
        Publish
        +
        + Bounties and contracts on Algora +
        +
      • +
      • +
        + <.icon name="tabler-bolt" class="size-8 text-purple-400" /> +
        +
        Match
        +
        + Proven Algora experts +
        +
      • +
      • +
        + <.icon name="tabler-briefcase" class="size-8 text-purple-400" /> +
        +
        Hire
        +
        + Top 1% OSS engineers +
        +
      • +
      +
      +
      +
      +
      {sidebar(assigns)} From e1dbd0d511bc032d892bd257548b95467b356ac6 Mon Sep 17 00:00:00 2001 From: zafer Date: Mon, 24 Mar 2025 01:03:29 +0200 Subject: [PATCH 7/8] refactor: remove Pricing4Live module and update router to streamline pricing page; enhance PricingLive layout and features for better user experience --- lib/algora_web/live/pricing4_live.ex | 763 --------------------------- lib/algora_web/live/pricing_live.ex | 659 ++++++++++------------- lib/algora_web/router.ex | 1 - 3 files changed, 291 insertions(+), 1132 deletions(-) delete mode 100644 lib/algora_web/live/pricing4_live.ex diff --git a/lib/algora_web/live/pricing4_live.ex b/lib/algora_web/live/pricing4_live.ex deleted file mode 100644 index d821f3959..000000000 --- a/lib/algora_web/live/pricing4_live.ex +++ /dev/null @@ -1,763 +0,0 @@ -defmodule AlgoraWeb.Pricing4Live do - @moduledoc false - use AlgoraWeb, :live_view - - alias Algora.PSP.ConnectCountries - alias AlgoraWeb.Components.Footer - alias AlgoraWeb.Components.Header - alias AlgoraWeb.Components.Wordmarks - - defmodule Plan do - @moduledoc false - defstruct [ - :id, - :name, - :description, - :price, - :cta_text, - :cta_url, - :popular, - :previous_tier, - :features, - :footnote - ] - end - - defmodule Feature do - @moduledoc false - defstruct [:name, :detail] - end - - defmodule FaqItem do - @moduledoc false - defstruct [:id, :question, :answer] - end - - @impl true - def render(assigns) do - ~H""" -
      - <%= if @screenshot? do %> -
      - <% else %> - - <% end %> - -
      - -
      -
      -
      -
      -
      -

      - Simple, transparent pricing -

      -

      - For individuals, OSS communities, and open/closed source companies -

      -
      -
      -
      - -
      -
      -
      -

      -
      - <.icon name="tabler-wallet" class="h-6 w-6 text-emerald-400" /> Payments -
      -

      -

      - Fund GitHub issues with USD rewards and pay when work is merged. Set up contracts for ongoing development work. Simple, outcome-based payments. -

      -
      -
      -
      - -
      - <%= for plan <- @plans1 do %> - <.pricing_card1 plan={plan} plans={@plans1} /> - <% end %> -
      - -
      -
      -
      -

      -
      - <.icon name="tabler-building-store" class="h-6 w-6 text-purple-400" /> Platform -
      -

      -

      - Connect with top open source talent, increase project visibility, and hire proven contributors -

      -
      -
      -
      -
      - <%= for plan <- @plans2 do %> - <.pricing_card2 plan={plan} plans={@plans2} /> - <% end %> -
      -
      -
      - -
      -
      -

      - Frequently asked questions -

      -
      - <%= for item <- @faq_items do %> -
      - - -
      - <% end %> -
      -
      -
      - -
      -
      -

      - The open source - Upwork alternative. -

      -
      - <.button navigate="/onboarding/org"> - Start your project - - <.button href="https://cal.com/ioannisflo" variant="secondary"> - Request a demo - -
      - <.features_bento /> -
      -
      - -
      - -
      -
      - """ - end - - @impl true - def mount(params, _session, socket) do - socket = - assign(socket, - screenshot?: not is_nil(params["screenshot"]), - page_title: "Pricing", - plans1: get_plans1(), - plans2: get_plans2(), - faq_items: get_faq_items(), - active_faq: nil - ) - - {:ok, socket} - end - - defp pricing_card1(assigns) do - ~H""" - <.link - href={@plan.cta_url} - class="group border ring-1 ring-transparent hover:ring-emerald-400 rounded-xl overflow-hidden" - > -
      -
      -
      -
      -

      - {@plan.name} -

      - <%= if @plan.popular do %> - - Most Popular - - <% end %> -
      -
      -

      - {@plan.description} -

      -
      -
      -
      - <%= case @plan.id do %> - <% :a0 -> %> -
      -
      -

      - 0% -

      -

      - service fee -

      -
      -
      - <% :a1 -> %> -
      -
      -

      - 9% -

      -

      - service fee -

      -
      -
      - <% :b0 -> %> -
      -
      -

      - $599 -

      -

      - /mo -

      -
      -
      - <% :b1 -> %> -
      -
      -

      - $1,599 -

      -

      - /mo -

      -
      -
      - <% :b2 -> %> -
      -
      -

      - Custom -

      -
      -
      - <% end %> -
      -
      - <%!-- <.button navigate={@plan.cta_url}> - Get started - --%> -
      -
      -
      -
        - <%= for feature <- @plan.features do %> -
      • -
        -
        - <.icon name="tabler-check" class="size-5 text-emerald-400" /> -
        - - {Phoenix.HTML.raw(feature.name)} - -
        - <%= if feature.detail do %> -

        {feature.detail}

        - <% end %> -
      • - <% end %> -
      -
      -
      - - """ - end - - defp pricing_card2(assigns) do - ~H""" -
      -
      -
      -
      -
      -

      - {@plan.name} -

      - <%= if @plan.popular do %> - - Most Popular - - <% end %> -
      -
      -

      - {@plan.description} -

      -
      - <.button - navigate={@plan.cta_url} - variant="purple" - size="xl" - class="drop-shadow-[0_1px_5px_#c084fc80]" - > - {@plan.cta_text} - -
      -
      -
      -
        -
      • -
        - <.icon name="tabler-world" class="size-8 text-purple-400" /> -
        -
        Publish
        -
        - Bounties and contracts on Algora -
        -
      • -
      • -
        - <.icon name="tabler-bolt" class="size-8 text-purple-400" /> -
        -
        Match
        -
        Proven Algora experts
        -
      • -
      • -
        - <.icon name="tabler-briefcase" class="size-8 text-purple-400" /> -
        -
        Hire
        -
        Top 1% OSS engineers
        -
      • -
      -
      -
      -
      - """ - end - - defp get_plans1 do - [ - %Plan{ - id: :a0, - name: "Receive payments", - description: "Get paid for your open source work", - price: "100%", - cta_text: "Start earning", - cta_url: "/onboarding/dev", - popular: false, - features: [ - %Feature{name: "Keep 100% of your earnings"}, - %Feature{name: "Available in #{ConnectCountries.count()} countries"}, - %Feature{name: "Fast payouts in 2-7 days"} - ] - }, - %Plan{ - id: :a1, - name: "Pay developers", - description: "Reward contributors with Algora", - price: nil, - cta_text: "Create bounties", - cta_url: "/onboarding/org", - popular: false, - features: [ - %Feature{name: "GitHub bounties and tips"}, - %Feature{name: "Contract work (fixed/hourly)"}, - %Feature{name: "Invoices, payouts, compliance, 1099s"} - ] - } - ] - end - - defp get_plans2 do - [ - %Plan{ - id: :b2, - name: "Looking for more?", - description: "Tailor Algora to your needs", - price: "Custom", - cta_text: "Contact us", - cta_url: "https://cal.com/ioannisflo", - popular: false, - features: [] - } - ] - end - - defp get_faq_items do - [ - %FaqItem{ - id: "platform-fee", - question: "How do the platform fees work?", - answer: - "For organizations, we charge a 19% fee on bounties, which can drop to 7.5% with volume. For individual contributors, you receive 100% of the bounty amount with no fees deducted." - }, - %FaqItem{ - id: "payment-methods", - question: "What payment methods do you support?", - answer: - ~s(We support payments via Stripe for funding bounties. Contributors can receive payments directly to their bank accounts in #{ConnectCountries.count()} countries/regions worldwide.) - }, - %FaqItem{ - id: "payment-process", - question: "How does the payment process work?", - answer: - "There's no upfront payment required for bounties. Organizations can either pay manually after merging pull requests, or save their card with Stripe to enable auto-pay on merge. Manual payments are processed through a secure Stripe hosted checkout page." - }, - %FaqItem{ - id: "invoices-receipts", - question: "Do you provide invoices and receipts?", - answer: - "Yes, users receive an invoice and receipt after each bounty payment. These documents are automatically generated and delivered to your email." - }, - %FaqItem{ - id: "tax-forms", - question: "How are tax forms handled?", - answer: - "We partner with Stripe to file and deliver 1099 forms for your US-based freelancers, simplifying tax compliance for organizations working with US contributors." - }, - %FaqItem{ - id: "payout-time", - question: "How long do payouts take?", - answer: - "Payout timing varies by country, typically ranging from 2-7 business days after a bounty is awarded. Initial payouts for new accounts may take 7-14 days. The exact timing depends on your location, banking system, and account history with Stripe, our payment processor." - }, - %FaqItem{ - id: "minimum-bounty", - question: "Is there a minimum bounty amount?", - answer: - "There's no strict minimum bounty amount. However, bounties with higher values tend to attract more attention and faster solutions from contributors." - }, - %FaqItem{ - id: "enterprise-options", - question: "Do you offer custom enterprise plans?", - answer: - ~s(Yes, for larger organizations with specific needs, we offer custom enterprise plans with additional features, dedicated support, and volume-based pricing. Please schedule a call with a founder to discuss your requirements.) - }, - %FaqItem{ - id: "supported-countries", - question: "Which countries are supported for contributors?", - answer: - ~s(We support contributors from #{ConnectCountries.count()} countries/regions worldwide. You can receive payments regardless of your location as long as you have a bank account in one of our supported countries. See the full list of supported countries.) - } - ] - end - - defp logo_cloud(assigns) do - ~H""" - - """ - end - - defp features_bento(assigns) do - ~H""" -
      -
      -
      - -
      -

      Bounties

      -

      - Fund Issues -

      -

      - Create bounties on your issues to incentivize solutions and attract talented contributors -

      -
      -
      -
      -
      -
      - -
      -

      Tips

      -

      - Show Appreciation -

      -

      - Say thanks with tips to recognize valuable contributions -

      -
      -
      -
      -
      -
      -
      -
      -
      -
      -
      - -

      - Merged pull request -

      -
      -
      -
      -
      - -

      - Completed payment -

      -
      -
      -
      -
      - - - - - - -

      - Transferring funds to contributor -

      -
      -
      -
      -
      -
      -
      -

      Payments

      -

      - Pay When Merged -

      -

      - Set up auto-pay to instantly reward contributors as their PRs are merged -

      -
      -
      -
      -
      -
      - -
      -

      Pooling

      -

      - Fund Together -

      -

      - Companies and individuals can pool their money together to fund important issues -

      -
      -
      -
      -
      -
      - -
      -

      Payouts

      -

      - Fast, Global Payouts -

      -

      - Receive payments directly to your bank account from all around the world - <.link - href="https://docs.algora.io/bounties/payments#supported-countries-regions" - class="font-medium text-foreground" - > - ({ConnectCountries.count()} countries/regions supported) - -

      -
      -
      -
      -
      -
      - -
      -

      Contracts

      -

      - Flexible Engagement -

      -

      - Set hourly rates, weekly hours, and payment schedules for ongoing development work. Track progress and manage payments all in one place. -

      -
      -
      -
      -
      - """ - end -end diff --git a/lib/algora_web/live/pricing_live.ex b/lib/algora_web/live/pricing_live.ex index 670d512ac..aa8eb32bf 100644 --- a/lib/algora_web/live/pricing_live.ex +++ b/lib/algora_web/live/pricing_live.ex @@ -10,6 +10,7 @@ defmodule AlgoraWeb.PricingLive do defmodule Plan do @moduledoc false defstruct [ + :id, :name, :description, :price, @@ -37,6 +38,7 @@ defmodule AlgoraWeb.PricingLive do ~H"""
      <%= if @screenshot? do %> +
      <% else %> <% end %> @@ -44,259 +46,60 @@ defmodule AlgoraWeb.PricingLive do
      -
      -
      -
      -

      - Simple pricing,
      built for developers -

      -

      - Fund bounties, reward contributors, and accelerate your project -

      +
      +
      +
      +
      +

      + Simple, transparent pricing +

      +

      + For individuals, OSS communities, and open/closed source companies +

      +
      -
      -
      - <%= for plan <- @plans do %> - <.pricing_card plan={plan} /> - <% end %> -
      -
      - -
      -
      -
      -

      - You're in good company -

      -

      - Join hundreds of open source companies that use Algora to accelerate their development -

      -
      -
      - <.logo_cloud /> -
      -
      -
      - -
      -
      -
      -

      - See what our customers say -

      -

      - Discover how Algora helps founders accelerate development and find top talent -

      -
      -
      -
      -
      -
      - -
      -
      -
      -

      - $15,000 Bounty: Delighted by the Results -

      -
      - -
      - We've used Algora extensively at Golem Cloud for our hiring needs and what I have found actually over the course of a few decades of hiring people is that many times someone who is very active in open-source development, these types of engineers often make fantastic additions to a team. - - Through our $15,000 bounty, we got hundreds of GitHub stars, more than 100 new users on our Discord, and some really fantastic Rust engineers. - - The bounty system helps us assess real-world skills instead of just technical challenge problems. It's a great way to find talented developers who deeply understand how your system works. -
      -
      -
      -
      - - John A. De Goes - -
      -
      John A. De Goes
      -
      Founder & CEO
      -
      +
      +
      +
      +

      +
      + <.icon name="tabler-wallet" class="h-6 w-6 text-emerald-400" /> Payments
      -

      -
      -
      -
      Total awarded
      -
      - $103,950 -
      -
      -
      -
      Bounties completed
      -
      - 359 -
      -
      -
      -
      Contributors rewarded
      -
      - 82 -
      -
      -
      + +

      + Fund GitHub issues with USD rewards and pay when work is merged. Set up contracts for ongoing development work. Simple, outcome-based payments. +

      -
      -
      -
      -

      - From Bounty Contributor
      To Full-Time Engineer -

      -
      - -
      - We were doing bounties on Algora, and this one developer Nick kept solving them. His personality really came through in the GitHub issues and code. We ended up hiring him from that, and it was the easiest hire because we already knew he was great from his contributions. - That's one massive advantage open source companies have versus closed source. When I talk to young people asking for advice, I specifically tell them to go on Algora and find issues there. You get to show people your work, plus you can point to your contributions as proof of your abilities, and you make money in the meantime. -
      -
      -
      -
      - - Eric Allam - -
      -
      Eric Allam
      -
      Founder & CTO
      -
      -
      - -
      -
      -
      -
      Total awarded
      -
      - $9,920 -
      -
      -
      -
      Bounties completed
      -
      - 106 -
      -
      -
      -
      Contributors rewarded
      -
      - 35 -
      +
      + <%= for plan <- @plans1 do %> + <.pricing_card1 plan={plan} plans={@plans1} /> + <% end %> +
      + +
      +
      +
      +

      +
      + <.icon name="tabler-building-store" class="h-6 w-6 text-purple-400" /> Platform
      -

      -
      -
      -
      - -
      + +

      + Connect with top open source talent, increase project visibility, and hire proven contributors +

      +
      + <%= for plan <- @plans2 do %> + <.pricing_card2 plan={plan} plans={@plans2} /> + <% end %> +
      @@ -336,7 +139,7 @@ defmodule AlgoraWeb.PricingLive do

      The open source - UpWork alternative. + Upwork alternative.

      <.button navigate="/onboarding/org"> @@ -360,158 +163,248 @@ defmodule AlgoraWeb.PricingLive do @impl true def mount(params, _session, socket) do socket = - socket - |> assign( + assign(socket, + screenshot?: not is_nil(params["screenshot"]), page_title: "Pricing", - plans: get_plans(), + plans1: get_plans1(), + plans2: get_plans2(), faq_items: get_faq_items(), active_faq: nil ) - |> assign(:screenshot?, not is_nil(params["screenshot"])) {:ok, socket} end - defp pricing_card(assigns) do + defp pricing_card1(assigns) do ~H""" -
      -
      -
      -
      -

      - {@plan.name} -

      - <%= if @plan.popular do %> - - Most Popular - - <% end %> + <.link + href={@plan.cta_url} + class="group border ring-1 ring-transparent hover:ring-emerald-400 rounded-xl overflow-hidden" + > +
      +
      +
      +
      +

      + {@plan.name} +

      + <%= if @plan.popular do %> + + Most Popular + + <% end %> +
      +
      +

      + {@plan.description} +

      +
      +
      +
      + <%= case @plan.id do %> + <% :a0 -> %> +
      +
      +

      + 0% +

      +

      + service fee +

      +
      +
      + <% :a1 -> %> +
      +
      +

      + 9% +

      +

      + service fee +

      +
      +
      + <% :b0 -> %> +
      +
      +

      + $599 +

      +

      + /mo +

      +
      +
      + <% :b1 -> %> +
      +
      +

      + $1,599 +

      +

      + /mo +

      +
      +
      + <% :b2 -> %> +
      +
      +

      + Custom +

      +
      +
      + <% end %> +
      +
      + <%!-- <.button navigate={@plan.cta_url}> + Get started + --%>
      -

      - {@plan.description} -

      - <.button - navigate={@plan.cta_url} - class="font-regular h-[42px] relative w-full cursor-pointer space-x-2 rounded-md border px-4 py-2 text-center outline-none outline-0 transition-all duration-200 ease-out focus-visible:outline-4 focus-visible:outline-offset-1" - > - {@plan.cta_text} - -
      -
      - <%= if @plan.price do %> -
      -

      From

      -
      -

      ${@plan.price}

      -

      / month

      +
      +
        + <%= for feature <- @plan.features do %> +
      • +
        +
        + <.icon name="tabler-check" class="size-5 text-emerald-400" /> +
        + + {Phoenix.HTML.raw(feature.name)} +
        -
      - <% else %> -
      - <%= if @plan.name == "Individuals" do %> -

      - 100% -

      -

      - payout received -

      - <% else %> -

      - 19% -

      -

      - pay as you go -

      + <%= if feature.detail do %> +

      {feature.detail}

      <% end %> -
      +
    • <% end %> -
    +
    -
    -

    - {if @plan.previous_tier, - do: "Everything in the #{@plan.previous_tier} Plan, plus:", - else: "Get started with:"} -

    -
      - <%= for feature <- @plan.features do %> -
    • -
      -
      - <.icon name="tabler-check" class="h-4 w-4 text-success" /> -
      - {Phoenix.HTML.raw(feature.name)} -
      - <%= if feature.detail do %> -

      {feature.detail}

      + + """ + end + + defp pricing_card2(assigns) do + ~H""" +
      +
      +
      +
      +
      +

      + {@plan.name} +

      + <%= if @plan.popular do %> + + Most Popular + <% end %> -
    • - <% end %> -
    - <%= if @plan.footnote do %> -
    -
    -

    - {@plan.footnote} -

    - <% end %> +

    + {@plan.description} +

    +
    + <.button + navigate={@plan.cta_url} + variant="purple" + size="xl" + class="drop-shadow-[0_1px_5px_#c084fc80]" + > + {@plan.cta_text} + +
    +
    +
    +
      +
    • +
      + <.icon name="tabler-world" class="size-8 text-purple-400" /> +
      +
      Publish
      +
      + Bounties and contracts on Algora +
      +
    • +
    • +
      + <.icon name="tabler-bolt" class="size-8 text-purple-400" /> +
      +
      Match
      +
      Proven Algora experts
      +
    • +
    • +
      + <.icon name="tabler-briefcase" class="size-8 text-purple-400" /> +
      +
      Hire
      +
      Top 1% OSS engineers
      +
    • +
    +
    """ end - defp get_plans do + defp get_plans1 do [ %Plan{ - name: "Individuals", - description: "For developers contributing to open source", - price: nil, - cta_text: "Start Contributing", + id: :a0, + name: "Receive payments", + description: "Get paid for your open source work", + price: "100%", + cta_text: "Start earning", cta_url: "/onboarding/dev", popular: false, features: [ - %Feature{name: "Payouts in 3-8 days on average"}, - %Feature{ - name: - ~s(Available in #{ConnectCountries.count()} countries/regions) - }, - %Feature{name: "Algora profile with contribution history"}, - %Feature{name: "Free livestreaming on Algora TV"} + %Feature{name: "Keep 100% of your earnings"}, + %Feature{name: "Available in #{ConnectCountries.count()} countries"}, + %Feature{name: "Fast payouts in 2-7 days"} ] }, %Plan{ - name: "Organizations", - description: "For companies and projects", + id: :a1, + name: "Pay developers", + description: "Reward contributors with Algora", price: nil, - cta_text: "Get Started", + cta_text: "Create bounties", cta_url: "/onboarding/org", popular: false, features: [ - %Feature{name: "Fees drop to 7.5% with volume"}, - %Feature{name: "Public org page with complete history"}, - %Feature{name: "Teammates with granular access rights"}, - %Feature{name: "Slack / Discord notifications (Webhooks)"}, - %Feature{name: "Display bounties on your site (SDK)"}, - %Feature{name: "Auto-pay on merge"}, - %Feature{name: "Embedded livestreaming"}, - %Feature{name: "Experts Network"}, - %Feature{name: "Hiring Portal"}, - %Feature{name: "Live Challenges"} + %Feature{name: "GitHub bounties and tips"}, + %Feature{name: "Contract work (fixed/hourly)"}, + %Feature{name: "Invoices, payouts, compliance, 1099s"} ] } ] end + defp get_plans2 do + [ + %Plan{ + id: :b2, + name: "Growing your team?", + description: "You're in the right place.", + price: "Custom", + cta_text: "Contact us", + cta_url: "https://cal.com/ioannisflo", + popular: false, + features: [] + } + ] + end + defp get_faq_items do [ %FaqItem{ @@ -524,7 +417,7 @@ defmodule AlgoraWeb.PricingLive do id: "payment-methods", question: "What payment methods do you support?", answer: - ~s(We support payments via Stripe for funding bounties. Contributors can receive payments directly to their bank accounts in #{ConnectCountries.count()} countries/regions worldwide.) + ~s(We support payments via Stripe for funding bounties. Contributors can receive payments directly to their bank accounts in #{ConnectCountries.count()} countries/regions worldwide.) }, %FaqItem{ id: "payment-process", @@ -566,7 +459,7 @@ defmodule AlgoraWeb.PricingLive do id: "supported-countries", question: "Which countries are supported for contributors?", answer: - ~s(We support contributors from #{ConnectCountries.count()} countries/regions worldwide. You can receive payments regardless of your location as long as you have a bank account in one of our supported countries. See the full list of supported countries.) + ~s(We support contributors from #{ConnectCountries.count()} countries/regions worldwide. You can receive payments regardless of your location as long as you have a bank account in one of our supported countries. See the full list of supported countries.) } ] end @@ -575,68 +468,98 @@ defmodule AlgoraWeb.PricingLive do ~H"""
    - + - + - + Remotion - + ZIO - + Trigger.dev - + Tembo - + Maybe - + - + Million - + - + Highlight - + Dittofeed Receive payments directly to your bank account from all around the world <.link - href={AlgoraWeb.Constants.get(:docs_supported_countries_url)} + href="https://docs.algora.io/bounties/payments#supported-countries-regions" class="font-medium text-foreground" > ({ConnectCountries.count()} countries/regions supported) diff --git a/lib/algora_web/router.ex b/lib/algora_web/router.ex index 3e4d6531a..cb27dddf8 100644 --- a/lib/algora_web/router.ex +++ b/lib/algora_web/router.ex @@ -135,7 +135,6 @@ defmodule AlgoraWeb.Router do live "/onboarding/org", Onboarding.OrgLive live "/onboarding/dev", Onboarding.DevLive live "/pricing", PricingLive - live "/pricing4", Pricing4Live live "/swift", SwiftBountiesLive end From d31344b331862b44cb4ff13882bfdbbe61b7a719 Mon Sep 17 00:00:00 2001 From: zafer Date: Mon, 24 Mar 2025 01:09:38 +0200 Subject: [PATCH 8/8] refactor: update pricing plans identifiers to string format, enhance layout with new background colors, and replace hardcoded demo link with a dynamic constant --- lib/algora_web/live/pricing_live.ex | 153 ++-------------------------- 1 file changed, 10 insertions(+), 143 deletions(-) diff --git a/lib/algora_web/live/pricing_live.ex b/lib/algora_web/live/pricing_live.ex index aa8eb32bf..9b4222057 100644 --- a/lib/algora_web/live/pricing_live.ex +++ b/lib/algora_web/live/pricing_live.ex @@ -5,7 +5,6 @@ defmodule AlgoraWeb.PricingLive do alias Algora.PSP.ConnectCountries alias AlgoraWeb.Components.Footer alias AlgoraWeb.Components.Header - alias AlgoraWeb.Components.Wordmarks defmodule Plan do @moduledoc false @@ -103,7 +102,7 @@ defmodule AlgoraWeb.PricingLive do
    -
    +

    Frequently asked questions @@ -145,7 +144,7 @@ defmodule AlgoraWeb.PricingLive do <.button navigate="/onboarding/org"> Start your project - <.button href="https://cal.com/ioannisflo" variant="secondary"> + <.button href={AlgoraWeb.Constants.get(:calendar_url)} variant="secondary"> Request a demo

    @@ -153,7 +152,7 @@ defmodule AlgoraWeb.PricingLive do
    -
    +
    @@ -206,7 +205,7 @@ defmodule AlgoraWeb.PricingLive do
    <%= case @plan.id do %> - <% :a0 -> %> + <% "receive-payments" -> %>

    @@ -217,7 +216,7 @@ defmodule AlgoraWeb.PricingLive do

    - <% :a1 -> %> + <% "pay-developers" -> %>

    @@ -228,29 +227,7 @@ defmodule AlgoraWeb.PricingLive do

    - <% :b0 -> %> -
    -
    -

    - $599 -

    -

    - /mo -

    -
    -
    - <% :b1 -> %> -
    -
    -

    - $1,599 -

    -

    - /mo -

    -
    -
    - <% :b2 -> %> + <% "grow-your-team" -> %>

    @@ -261,9 +238,6 @@ defmodule AlgoraWeb.PricingLive do <% end %>

    - <%!-- <.button navigate={@plan.cta_url}> - Get started - --%>
    @@ -360,7 +334,7 @@ defmodule AlgoraWeb.PricingLive do defp get_plans1 do [ %Plan{ - id: :a0, + id: "receive-payments", name: "Receive payments", description: "Get paid for your open source work", price: "100%", @@ -374,7 +348,7 @@ defmodule AlgoraWeb.PricingLive do ] }, %Plan{ - id: :a1, + id: "pay-developers", name: "Pay developers", description: "Reward contributors with Algora", price: nil, @@ -393,12 +367,12 @@ defmodule AlgoraWeb.PricingLive do defp get_plans2 do [ %Plan{ - id: :b2, + id: "grow-your-team", name: "Growing your team?", description: "You're in the right place.", price: "Custom", cta_text: "Contact us", - cta_url: "https://cal.com/ioannisflo", + cta_url: AlgoraWeb.Constants.get(:calendar_url), popular: false, features: [] } @@ -464,113 +438,6 @@ defmodule AlgoraWeb.PricingLive do ] end - defp logo_cloud(assigns) do - ~H""" -
    - -
    - """ - end - defp features_bento(assigns) do ~H"""