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/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)} diff --git a/lib/algora_web/live/pricing_live.ex b/lib/algora_web/live/pricing_live.ex index 670d512ac..9b4222057 100644 --- a/lib/algora_web/live/pricing_live.ex +++ b/lib/algora_web/live/pricing_live.ex @@ -5,11 +5,11 @@ 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 defstruct [ + :id, :name, :description, :price, @@ -37,6 +37,7 @@ defmodule AlgoraWeb.PricingLive do ~H"""
<%= if @screenshot? do %> +
<% else %> <% end %> @@ -44,263 +45,64 @@ 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
-
-
-
-
-
-
Total awarded
-
- $103,950 -
-
-
-
Bounties completed
-
- 359 -
-
-
-
Contributors rewarded
-
- 82 -
+
+
+
+

+
+ <.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. +

-
-
-
-

- 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 %> +
-
+

Frequently asked questions @@ -336,13 +138,13 @@ defmodule AlgoraWeb.PricingLive do

The open source - UpWork alternative. + Upwork alternative.

<.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
@@ -350,7 +152,7 @@ defmodule AlgoraWeb.PricingLive do

-
+
@@ -360,158 +162,223 @@ 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 %> + <% "receive-payments" -> %> +
+
+

+ 0% +

+

+ service fee +

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

+ 9% +

+

+ service fee +

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

+ Custom +

+
+
+ <% end %> +
+
-

- {@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: "receive-payments", + 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: "pay-developers", + 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: "grow-your-team", + name: "Growing your team?", + description: "You're in the right place.", + price: "Custom", + cta_text: "Contact us", + cta_url: AlgoraWeb.Constants.get(:calendar_url), + popular: false, + features: [] + } + ] + end + defp get_faq_items do [ %FaqItem{ @@ -524,7 +391,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,88 +433,11 @@ 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 - defp logo_cloud(assigns) do - ~H""" - - """ - end - defp features_bento(assigns) do ~H"""
@@ -811,7 +601,7 @@ defmodule AlgoraWeb.PricingLive do

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)