From 45cc438a8068663ca0785d2a8ba776eeafe89fbe Mon Sep 17 00:00:00 2001 From: zafer Date: Sat, 15 Mar 2025 16:58:53 +0200 Subject: [PATCH 1/7] feat: add GitHub funding section to HomeLive - Introduced a new section in HomeLive to promote funding for GitHub issues, featuring contributions from notable individuals and organizations. - Enhanced the UI with a grid layout showcasing funded projects, including details about the contributors and their respective funded issues. --- lib/algora_web/live/home_live.ex | 92 +++++++++++++++++++++++++++++++- 1 file changed, 91 insertions(+), 1 deletion(-) diff --git a/lib/algora_web/live/home_live.ex b/lib/algora_web/live/home_live.ex index 996fd76b2..516ff0ac3 100644 --- a/lib/algora_web/live/home_live.ex +++ b/lib/algora_web/live/home_live.ex @@ -153,7 +153,97 @@ defmodule AlgoraWeb.HomeLive do - +
+

+ Fund GitHub Issues +

+

+ Support open source development with bounties on GitHub issues +

+ +
+
+ Scott Chacon +
+
Scott Chacon
+
GitHub Cofounder
+
+ Funded $500 for Vim replace mode in + + Zed Editor + +
+
+
+
+ Framer +
+
Framer
+
Design & Prototyping Tool
+
+ Funded $500 for multiple round-robin hosts in + + Cal.com + +
+
+
+
+ PX4 +
+
PX4 Autopilot
+
Open Source Drone Software
+
+ Community funded $500 for collision prevention in + + PX4 Autopilot + +
+
+
+
+ Coolify +
+
Coolify
+
Self-Hosted Heroku Alternative
+
+ Community funded features through + + Algora bounties + +
+
+
+
+
From 2a68411e806cd6d84facf038ec950c376cb03314 Mon Sep 17 00:00:00 2001 From: zafer Date: Sat, 15 Mar 2025 17:22:04 +0200 Subject: [PATCH 2/7] feat: implement bounty and tip submission forms in HomeLive - Added forms for creating bounties and tips, enhancing user interaction for funding developers. - Integrated form validation and handling for both submissions, ensuring proper data management. - Updated the UI to include sections for posting bounties and tipping developers, improving overall functionality. --- lib/algora_web/live/home_live.ex | 157 ++++++++++++++++++++++++++++++- 1 file changed, 154 insertions(+), 3 deletions(-) diff --git a/lib/algora_web/live/home_live.ex b/lib/algora_web/live/home_live.ex index 516ff0ac3..0ed7c3697 100644 --- a/lib/algora_web/live/home_live.ex +++ b/lib/algora_web/live/home_live.ex @@ -2,18 +2,22 @@ defmodule AlgoraWeb.HomeLive do @moduledoc false use AlgoraWeb, :live_view + import Ecto.Changeset import Ecto.Query import Phoenix.LiveView.TagEngine import Tails, only: [classes: 1] alias Algora.Accounts alias Algora.Accounts.User + alias Algora.Bounties alias Algora.Payments.Transaction alias Algora.Repo alias AlgoraWeb.Components.Footer alias AlgoraWeb.Components.Header alias AlgoraWeb.Components.Wordmarks alias AlgoraWeb.Data.PlatformStats + alias AlgoraWeb.Forms.BountyForm + alias AlgoraWeb.Forms.TipForm @impl true def mount(%{"country_code" => country_code}, _session, socket) do @@ -29,7 +33,10 @@ defmodule AlgoraWeb.HomeLive do {:ok, socket |> assign(:featured_devs, Accounts.list_featured_developers(country_code)) - |> assign(:stats, stats)} + |> assign(:stats, stats) + |> assign(:bounty_form, to_form(BountyForm.changeset(%BountyForm{}, %{}))) + |> assign(:tip_form, to_form(TipForm.changeset(%TipForm{}, %{}))) + |> assign(:pending_action, nil)} end @impl true @@ -243,6 +250,60 @@ defmodule AlgoraWeb.HomeLive do + +
+ <.card class="bg-muted/30"> + <.card_header> +
+ <.icon name="tabler-diamond" class="h-8 w-8" /> +

Post a bounty

+
+ + <.card_content> + <.simple_form for={@bounty_form} phx-submit="create_bounty"> +
+ <.input + label="URL" + field={@bounty_form[:url]} + placeholder="https://github.com/owner/repo/issues/1337" + /> + <.input + label="Amount" + icon="tabler-currency-dollar" + field={@bounty_form[:amount]} + /> +
+ <.button variant="subtle">Submit +
+
+ + + + + <.card class="bg-muted/30"> + <.card_header> +
+ <.icon name="tabler-gift" class="h-8 w-8" /> +

Tip a developer

+
+ + <.card_content> + <.simple_form for={@tip_form} phx-submit="create_tip"> +
+ <.input + label="GitHub handle" + field={@tip_form[:github_handle]} + placeholder="jsmith" + /> + <.input label="Amount" icon="tabler-currency-dollar" field={@tip_form[:amount]} /> +
+ <.button variant="subtle">Submit +
+
+ + + +
@@ -251,7 +312,97 @@ defmodule AlgoraWeb.HomeLive do """ end - def dev_card(assigns) do + @impl true + def handle_event("create_bounty" = event, %{"bounty_form" => params} = unsigned_params, socket) do + changeset = + %BountyForm{} + |> BountyForm.changeset(params) + |> Map.put(:action, :validate) + + amount = get_field(changeset, :amount) + ticket_ref = get_field(changeset, :ticket_ref) + + if changeset.valid? do + if socket.assigns[:current_user] do + case Bounties.create_bounty(%{ + creator: socket.assigns.current_user, + owner: socket.assigns.current_user, + amount: amount, + ticket_ref: ticket_ref + }) do + {:ok, _bounty} -> + {:noreply, + socket + |> put_flash(:info, "Bounty created") + |> redirect(to: ~p"/")} + + {:error, :already_exists} -> + {:noreply, put_flash(socket, :warning, "You have already created a bounty for this ticket")} + + {:error, _reason} -> + {:noreply, put_flash(socket, :error, "Something went wrong")} + end + else + {:noreply, + socket + |> assign(:pending_action, {event, unsigned_params}) + |> push_event("open_popup", %{url: socket.assigns.oauth_url})} + end + else + {:noreply, assign(socket, :bounty_form, to_form(changeset))} + end + end + + @impl true + def handle_event("create_tip" = event, %{"tip_form" => params} = unsigned_params, socket) do + changeset = + %TipForm{} + |> TipForm.changeset(params) + |> Map.put(:action, :validate) + + if changeset.valid? do + if socket.assigns[:current_user] do + with {:ok, token} <- Accounts.get_access_token(socket.assigns.current_user), + {:ok, recipient} <- Workspace.ensure_user(token, get_field(changeset, :github_handle)), + {:ok, checkout_url} <- + Bounties.create_tip(%{ + creator: socket.assigns.current_user, + owner: socket.assigns.current_user, + recipient: recipient, + amount: get_field(changeset, :amount) + }) do + {:noreply, redirect(socket, external: checkout_url)} + else + {:error, reason} -> + Logger.error("Failed to create tip: #{inspect(reason)}") + {:noreply, put_flash(socket, :error, "Something went wrong")} + end + else + {:noreply, + socket + |> assign(:pending_action, {event, unsigned_params}) + |> push_event("open_popup", %{url: socket.assigns.oauth_url})} + end + else + {:noreply, assign(socket, :tip_form, to_form(changeset))} + end + end + + @impl true + def handle_info({:authenticated, user}, socket) do + socket = assign(socket, :current_user, user) + + case socket.assigns.pending_action do + {event, params} -> + socket = assign(socket, :pending_action, nil) + handle_event(event, params, socket) + + nil -> + {:noreply, socket} + end + end + + defp dev_card(assigns) do ~H"""
Date: Sat, 15 Mar 2025 17:50:25 +0200 Subject: [PATCH 3/7] feat: enhance GitHub funding section in HomeLive - Updated the layout and design of the funding section to improve user engagement, featuring a grid of funded projects with enhanced visuals and contributor details. - Adjusted text styles and spacing for better readability and aesthetics. - Added links to funded issues, making it easier for users to access and support open source projects. --- lib/algora_web/live/home_live.ex | 252 ++++++++++++++++--------------- 1 file changed, 133 insertions(+), 119 deletions(-) diff --git a/lib/algora_web/live/home_live.ex b/lib/algora_web/live/home_live.ex index 0ed7c3697..75f7096c6 100644 --- a/lib/algora_web/live/home_live.ex +++ b/lib/algora_web/live/home_live.ex @@ -164,145 +164,159 @@ defmodule AlgoraWeb.HomeLive do

Fund GitHub Issues

-

+

Support open source development with bounties on GitHub issues

-
-
- Scott Chacon -
-
Scott Chacon
-
GitHub Cofounder
-
- Funded $500 for Vim replace mode in - - Zed Editor - + -
- Framer -
-
Framer
-
Design & Prototyping Tool
-
-
- PX4 -
-
PX4 Autopilot
-
Open Source Drone Software
-
-
+
$500
+
+ Coolify -
-
Coolify
-
Self-Hosted Heroku Alternative
-
- Community funded features through - - Algora bounties - +
+
Coolify
+
Self-Hosted Heroku Alternative
+
+ Community funded features
-
+
$2,543
+
-
- <.card class="bg-muted/30"> - <.card_header> -
- <.icon name="tabler-diamond" class="h-8 w-8" /> -

Post a bounty

-
- - <.card_content> - <.simple_form for={@bounty_form} phx-submit="create_bounty"> -
- <.input - label="URL" - field={@bounty_form[:url]} - placeholder="https://github.com/owner/repo/issues/1337" - /> - <.input - label="Amount" - icon="tabler-currency-dollar" - field={@bounty_form[:amount]} - /> -
- <.button variant="subtle">Submit -
+
+

+ Fund any issue + in seconds +

+
+ <.card class="bg-muted/30"> + <.card_header> +
+ <.icon name="tabler-diamond" class="h-8 w-8" /> +

Post a bounty

- - - - - <.card class="bg-muted/30"> - <.card_header> -
- <.icon name="tabler-gift" class="h-8 w-8" /> -

Tip a developer

-
- - <.card_content> - <.simple_form for={@tip_form} phx-submit="create_tip"> -
- <.input - label="GitHub handle" - field={@tip_form[:github_handle]} - placeholder="jsmith" - /> - <.input label="Amount" icon="tabler-currency-dollar" field={@tip_form[:amount]} /> -
- <.button variant="subtle">Submit + + <.card_content> + <.simple_form for={@bounty_form} phx-submit="create_bounty"> +
+ <.input + label="URL" + field={@bounty_form[:url]} + placeholder="https://github.com/owner/repo/issues/1337" + /> + <.input + label="Amount" + icon="tabler-currency-dollar" + field={@bounty_form[:amount]} + /> +
+ <.button variant="subtle">Submit +
+ + + + <.card class="bg-muted/30"> + <.card_header> +
+ <.icon name="tabler-gift" class="h-8 w-8" /> +

Tip a developer

- - - + + <.card_content> + <.simple_form for={@tip_form} phx-submit="create_tip"> +
+ <.input + label="GitHub handle" + field={@tip_form[:github_handle]} + placeholder="jsmith" + /> + <.input + label="Amount" + icon="tabler-currency-dollar" + field={@tip_form[:amount]} + /> +
+ <.button variant="subtle">Submit +
+
+ + + +
From 101a3fff88ef0161ebd7aa4a2462dd4dafb88bca Mon Sep 17 00:00:00 2001 From: zafer Date: Sat, 15 Mar 2025 17:52:13 +0200 Subject: [PATCH 4/7] refactor: update link components in HomeLive - Replaced traditional anchor tags with custom link components for improved navigation and security. - Added 'rel="noopener"' attribute to external links to enhance performance and security. - Ensured consistent styling and functionality across all links in the funding section. --- lib/algora_web/live/home_live.ex | 21 ++++++++++++--------- 1 file changed, 12 insertions(+), 9 deletions(-) diff --git a/lib/algora_web/live/home_live.ex b/lib/algora_web/live/home_live.ex index 75f7096c6..164334114 100644 --- a/lib/algora_web/live/home_live.ex +++ b/lib/algora_web/live/home_live.ex @@ -169,8 +169,9 @@ defmodule AlgoraWeb.HomeLive do

$500
-
+ - PX4 @@ -210,8 +212,9 @@ defmodule AlgoraWeb.HomeLive do
$1,000
-
- + + <.link href="https://github.com/calcom/cal.com/issues/11953" class="relative flex items-center gap-x-4 rounded-xl bg-card/50 p-6 ring-1 ring-border hover:bg-card/70 transition-colors" > @@ -235,9 +238,9 @@ defmodule AlgoraWeb.HomeLive do
$500
-
- + <.link + navigate={~p"/org/coollabsio"} class="relative flex items-center gap-x-4 rounded-xl bg-card/50 p-6 ring-1 ring-border hover:bg-card/70 transition-colors" >
$2,543
-
+
From 0e83ec1bef4165e2f3801e8718cf846a6df0a022 Mon Sep 17 00:00:00 2001 From: zafer Date: Sat, 15 Mar 2025 18:13:44 +0200 Subject: [PATCH 5/7] feat: expand HomeLive with new contract and hiring features - Added a comprehensive section for managing contract work, including features for bounties, secure payments, and a global talent pool. - Introduced a new hiring section emphasizing real-world collaboration and evaluation of developers through contributions. - Enhanced UI with engaging visuals and informative content to improve user experience and promote the platform's capabilities. - Included new images to support the updated content, enhancing the overall aesthetic and functionality of the HomeLive page. --- lib/algora_web/live/home_live.ex | 437 ++++++++++++++++++ .../screenshots/payout-account-compact.png | Bin 0 -> 31626 bytes 2 files changed, 437 insertions(+) create mode 100644 priv/static/images/screenshots/payout-account-compact.png diff --git a/lib/algora_web/live/home_live.ex b/lib/algora_web/live/home_live.ex index 164334114..8260267bc 100644 --- a/lib/algora_web/live/home_live.ex +++ b/lib/algora_web/live/home_live.ex @@ -321,6 +321,443 @@ defmodule AlgoraWeb.HomeLive do
+ +
+

+ Streamline Contract Work +

+

+ Use bounties in your own repositories to manage contract work efficiently. Pay only for completed tasks, with full GitHub integration. +

+
+
+ <.icon name="tabler-git-pull-request" class="h-12 w-12 mb-4 text-primary" /> +

Native GitHub Workflow

+

+ Work directly in GitHub using issues and pull requests - no context switching needed. +

+
+
+ <.icon name="tabler-shield-check" class="h-12 w-12 mb-4 text-primary" /> +

Secure Payments

+

+ Funds are held in escrow and only released when work is completed to your satisfaction. +

+
+
+ <.icon name="tabler-users" class="h-12 w-12 mb-4 text-primary" /> +

Global Talent Pool

+

+ Access vetted developers from around the world, specialized in your tech stack. +

+
+
+
+
+
+ +
+

Bounties

+

+ Fund Issues +

+

+ Create bounties on any issue 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 +

+
+
+
+ +
+

Payouts

+

+ Fast, Global Payouts +

+

+ Receive payments directly to your bank account from all around the world + (120 countries 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. +

+
+
+
+
+
+ +
+

+ Hire with Confidence +

+

+ Find your next team member through real-world collaboration. Use bounties to evaluate developers based on actual contributions to your codebase. +

+
+
+ <.icon name="tabler-code" class="h-12 w-12 mb-4 text-primary" /> +

Try Before You Hire

+

+ Evaluate candidates through real contributions to your projects, not just interviews. +

+
+
+ <.icon name="tabler-target" class="h-12 w-12 mb-4 text-primary" /> +

Find Domain Experts

+

+ Connect with developers who have proven expertise in your specific tech stack. +

+
+
+ <.icon name="tabler-rocket" class="h-12 w-12 mb-4 text-primary" /> +

Fast Onboarding

+

+ Hire developers who are already familiar with your codebase and workflow. +

+
+
+
+
+
+
+ +
+
+
+

+ $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 +
+
+
+
+
+
+ +
+
+
+
+
diff --git a/priv/static/images/screenshots/payout-account-compact.png b/priv/static/images/screenshots/payout-account-compact.png new file mode 100644 index 0000000000000000000000000000000000000000..cbc21bf5df1a8076792947efb1e2dcf57333739a GIT binary patch literal 31626 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 Date: Sat, 15 Mar 2025 18:26:04 +0200 Subject: [PATCH 6/7] feat: add FAQ section and enhance HomeLive layout - Introduced a new FAQ section to address common user inquiries, improving user support and engagement. - Enhanced the layout of the HomeLive page with updated sections for hiring and contract work, ensuring a cohesive user experience. - Improved styling and structure for better readability and visual appeal, including responsive design adjustments. - Integrated dynamic content for FAQs, allowing for easy updates and management of frequently asked questions. --- lib/algora_web/live/home_live.ex | 1010 +++++++++++++++++------------- 1 file changed, 566 insertions(+), 444 deletions(-) diff --git a/lib/algora_web/live/home_live.ex b/lib/algora_web/live/home_live.ex index 8260267bc..821824361 100644 --- a/lib/algora_web/live/home_live.ex +++ b/lib/algora_web/live/home_live.ex @@ -11,6 +11,7 @@ defmodule AlgoraWeb.HomeLive do alias Algora.Accounts.User alias Algora.Bounties alias Algora.Payments.Transaction + alias Algora.PSP.ConnectCountries alias Algora.Repo alias AlgoraWeb.Components.Footer alias AlgoraWeb.Components.Header @@ -34,6 +35,7 @@ defmodule AlgoraWeb.HomeLive do socket |> assign(:featured_devs, Accounts.list_featured_developers(country_code)) |> assign(:stats, stats) + |> assign(:faq_items, get_faq_items()) |> assign(:bounty_form, to_form(BountyForm.changeset(%BountyForm{}, %{}))) |> assign(:tip_form, to_form(TipForm.changeset(%TipForm{}, %{}))) |> assign(:pending_action, nil)} @@ -42,11 +44,11 @@ defmodule AlgoraWeb.HomeLive do @impl true def render(assigns) do ~H""" -
+
-
+
-
+
+ +
+

Fund GitHub Issues

@@ -250,7 +255,9 @@ defmodule AlgoraWeb.HomeLive do />
Coolify
-
Self-Hosted Heroku Alternative
+
+ Self-Hosted Heroku Alternative +
Community funded features
@@ -258,507 +265,558 @@ defmodule AlgoraWeb.HomeLive do
$2,543
- -
-

- Fund any issue - in seconds -

-
- <.card class="bg-muted/30"> - <.card_header> -
- <.icon name="tabler-diamond" class="h-8 w-8" /> -

Post a bounty

-
- - <.card_content> - <.simple_form for={@bounty_form} phx-submit="create_bounty"> -
- <.input - label="URL" - field={@bounty_form[:url]} - placeholder="https://github.com/owner/repo/issues/1337" - /> - <.input - label="Amount" - icon="tabler-currency-dollar" - field={@bounty_form[:amount]} - /> -
- <.button variant="subtle">Submit -
+
+
+

+ Fund any issue + in seconds +

+
+ <.card class="bg-muted/30"> + <.card_header> +
+ <.icon name="tabler-diamond" class="h-8 w-8" /> +

Post a bounty

+
+ + <.card_content> + <.simple_form for={@bounty_form} phx-submit="create_bounty"> +
+ <.input + label="URL" + field={@bounty_form[:url]} + placeholder="https://github.com/owner/repo/issues/1337" + /> + <.input + label="Amount" + icon="tabler-currency-dollar" + field={@bounty_form[:amount]} + /> +
+ <.button variant="subtle">Submit
- - - - <.card class="bg-muted/30"> - <.card_header> -
- <.icon name="tabler-gift" class="h-8 w-8" /> -

Tip a developer

- - <.card_content> - <.simple_form for={@tip_form} phx-submit="create_tip"> -
- <.input - label="GitHub handle" - field={@tip_form[:github_handle]} - placeholder="jsmith" - /> - <.input - label="Amount" - icon="tabler-currency-dollar" - field={@tip_form[:amount]} - /> -
- <.button variant="subtle">Submit -
+ + + + <.card class="bg-muted/30"> + <.card_header> +
+ <.icon name="tabler-gift" class="h-8 w-8" /> +

Tip a developer

+
+ + <.card_content> + <.simple_form for={@tip_form} phx-submit="create_tip"> +
+ <.input + label="GitHub handle" + field={@tip_form[:github_handle]} + placeholder="jsmith" + /> + <.input label="Amount" icon="tabler-currency-dollar" field={@tip_form[:amount]} /> +
+ <.button variant="subtle">Submit
- - - -
+
+ + +
+
+
-
-

- Streamline Contract Work -

-

- Use bounties in your own repositories to manage contract work efficiently. Pay only for completed tasks, with full GitHub integration. -

-
-
- <.icon name="tabler-git-pull-request" class="h-12 w-12 mb-4 text-primary" /> -

Native GitHub Workflow

-

- Work directly in GitHub using issues and pull requests - no context switching needed. -

-
-
- <.icon name="tabler-shield-check" class="h-12 w-12 mb-4 text-primary" /> -

Secure Payments

-

- Funds are held in escrow and only released when work is completed to your satisfaction. -

-
-
- <.icon name="tabler-users" class="h-12 w-12 mb-4 text-primary" /> -

Global Talent Pool

-

- Access vetted developers from around the world, specialized in your tech stack. -

-
+
+
+

+ Streamline Contract Work +

+

+ Use bounties in your own repositories to manage contract work efficiently. Pay only for completed tasks, with full GitHub integration. +

+
+
+ <.icon name="tabler-git-pull-request" class="h-12 w-12 mb-4 text-primary" /> +

Native GitHub Workflow

+

+ Work directly in GitHub using issues and pull requests - no context switching needed. +

-
-
-
- -
-

Bounties

-

- Fund Issues -

-

- Create bounties on any issue to incentivize solutions and attract talented contributors -

-
+
+ <.icon name="tabler-shield-check" class="h-12 w-12 mb-4 text-primary" /> +

Secure Payments

+

+ Pay only for completed work. No upfront costs - payments are processed after successful code review and merge. +

+
+
+ <.icon name="tabler-users" class="h-12 w-12 mb-4 text-primary" /> +

Global Talent Pool

+

+ Access vetted developers from around the world, specialized in your tech stack. +

+
+
+
+
+
+ +
+

Bounties

+

+ Fund Issues +

+

+ Create bounties on any issue to incentivize solutions and attract talented contributors +

-
-
- -
-

Tips

-

- Show Appreciation -

-

- Say thanks with tips to recognize valuable contributions -

-
+
+
+
+ +
+

Tips

+

+ Show Appreciation +

+

+ Say thanks with tips to recognize valuable contributions +

-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+ -

- Merged pull request -

-
+ + +

+ Merged pull request +

-
-
-
+
+ -

- Completed payment -

-
+ + +

+ Completed payment +

-
-
- +
+
+ + - - - - - -

- Transferring funds to contributor -

-
+ + + + +

+ Transferring funds to contributor +

-
-

Payments

-

- Pay When Merged -

-

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

-
-
- -
-

Payouts

-

- Fast, Global Payouts -

-

- Receive payments directly to your bank account from all around the world - (120 countries supported) -

-
+
+

Payments

+

+ Pay When Merged +

+

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

-
-
-
- +
+
-

Contracts

+

Payouts

- Flexible Engagement + Fast, Global Payouts

- Set hourly rates, weekly hours, and payment schedules for ongoing development work. Track progress and manage payments all in one place. + Receive payments directly to your bank account from all around the world + (120 countries 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. +

+
+
+
+
+
-
-

- Hire with Confidence -

-

- Find your next team member through real-world collaboration. Use bounties to evaluate developers based on actual contributions to your codebase. -

-
-
- <.icon name="tabler-code" class="h-12 w-12 mb-4 text-primary" /> -

Try Before You Hire

-

- Evaluate candidates through real contributions to your projects, not just interviews. -

-
-
- <.icon name="tabler-target" class="h-12 w-12 mb-4 text-primary" /> -

Find Domain Experts

-

- Connect with developers who have proven expertise in your specific tech stack. -

-
-
- <.icon name="tabler-rocket" class="h-12 w-12 mb-4 text-primary" /> -

Fast Onboarding

-

- Hire developers who are already familiar with your codebase and workflow. -

-
+
+
+

+ Hire with Confidence +

+

+ Find your next team member through real-world collaboration. Use bounties to evaluate developers based on actual contributions to your codebase. +

+
+
+ <.icon name="tabler-code" class="h-12 w-12 mb-4 text-primary" /> +

Try Before You Hire

+

+ Evaluate candidates through real contributions to your projects, not just interviews. +

-
-
-
-
- -
+
+ <.icon name="tabler-target" class="h-12 w-12 mb-4 text-primary" /> +

Find Domain Experts

+

+ Connect with developers who have proven expertise in your specific tech stack. +

+
+
+ <.icon name="tabler-rocket" class="h-12 w-12 mb-4 text-primary" /> +

Fast Onboarding

+

+ Hire developers who are already familiar with your codebase and workflow. +

+
+
+
+
+
+
+
-
-

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

-
-
+

+ $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. + + + +
+ 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. + 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. -
+ 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
-
+
+
+
+ + John A. De Goes + +
+
John A. De Goes
+
Founder & CEO
-
-
-
Total awarded
-
- $103,950 -
-
-
-
Bounties completed
-
- 359 -
-
-
-
Contributors rewarded
-
- 82 -
-
-
+
+
+
Total awarded
+
+ $103,950 +
+
+
+
Bounties completed
+
+ 359 +
+
+
+
Contributors rewarded
+
+ 82 +
+
+
-
-
-
-

- From Bounty Contributor
To Full-Time Engineer -

-
-
+
+
+

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

+ 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 + +
+
+
+ +
@@ -1016,4 +1074,68 @@ defmodule AlgoraWeb.HomeLive do defp format_money(money), do: money |> Money.round(currency_digits: 0) |> Money.to_string!(no_fraction_if_integer: true) defp format_number(number), do: Number.Delimit.number_to_delimited(number, precision: 0) + + defmodule FaqItem do + @moduledoc false + defstruct [:id, :question, :answer] + 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 end From a09485476ca720ef188f5bc82b851cb4081194dc Mon Sep 17 00:00:00 2001 From: zafer Date: Mon, 17 Mar 2025 19:51:35 +0200 Subject: [PATCH 7/7] add missing imports --- lib/algora_web/live/home_live.ex | 3 +++ 1 file changed, 3 insertions(+) diff --git a/lib/algora_web/live/home_live.ex b/lib/algora_web/live/home_live.ex index 821824361..651a422a4 100644 --- a/lib/algora_web/live/home_live.ex +++ b/lib/algora_web/live/home_live.ex @@ -13,6 +13,7 @@ defmodule AlgoraWeb.HomeLive do alias Algora.Payments.Transaction alias Algora.PSP.ConnectCountries alias Algora.Repo + alias Algora.Workspace alias AlgoraWeb.Components.Footer alias AlgoraWeb.Components.Header alias AlgoraWeb.Components.Wordmarks @@ -20,6 +21,8 @@ defmodule AlgoraWeb.HomeLive do alias AlgoraWeb.Forms.BountyForm alias AlgoraWeb.Forms.TipForm + require Logger + @impl true def mount(%{"country_code" => country_code}, _session, socket) do Gettext.put_locale(AlgoraWeb.Gettext, Algora.Util.locale_from_country_code(country_code))