QrRapido/Views/Developer/Pricing.cshtml
Ricardo Carneiro 7a0c12f8d2
Some checks failed
Deploy QR Rapido / test (push) Failing after 17s
Deploy QR Rapido / build-and-push (push) Has been skipped
Deploy QR Rapido / deploy-staging (push) Has been skipped
Deploy QR Rapido / deploy-production (push) Has been skipped
feat: api separada do front-end e area do desenvolvedor.
2026-03-08 12:40:51 -03:00

181 lines
10 KiB
Plaintext

@using QRRapidoApp.Models
@{
ViewData["Title"] = "Planos de API — QRRapido";
Layout = "~/Views/Shared/_Layout.cshtml";
var currentTier = ViewBag.CurrentTier as ApiPlanTier? ?? ApiPlanTier.Free;
var errorMsg = TempData["Error"] as string;
var culture = ViewBag.Culture as string ?? "pt-BR";
var isEs = culture == "es-PY";
var devBase = isEs ? "/es-PY/Developer" : "/Developer";
string T(string pt, string es) => isEs ? es : pt;
}
<div class="container mt-4 mb-5">
<div class="text-center mb-5">
<h1 class="h2 fw-bold">@T("Planos de API", "Planes de API")</h1>
<p class="text-muted">
@T("Escolha o plano que melhor se adapta à sua integração.",
"Elegí el plan porã que mejor se adapte a tu integración.")
<br>
@T("Todos os planos incluem a", "Todos los planes incluyen la")
<strong>API REST</strong>
@T("com autenticação por chave.", "con autenticación por clave.")
</p>
@if (!string.IsNullOrEmpty(errorMsg))
{
<div class="alert alert-danger d-inline-block mt-2">@errorMsg</div>
}
</div>
<div class="row g-4 justify-content-center">
<!-- Free -->
<div class="col-md-6 col-lg-3">
<div class="card h-100 border-0 shadow-sm @(currentTier == ApiPlanTier.Free ? "border border-secondary border-2" : "")">
<div class="card-header bg-secondary text-white text-center py-3">
<h5 class="mb-0">Free</h5>
</div>
<div class="card-body text-center">
<div class="display-5 fw-bold my-3">R$0</div>
<p class="text-muted small">@T("para sempre", "para siempre")</p>
<ul class="list-unstyled text-start small mt-3">
<li class="mb-2"><i class="fas fa-check text-success me-2"></i>@T("5 QRs vitalícios (cota gratuita)", "5 QRs de por vida (cuota gratuita)")</li>
<li class="mb-2"><i class="fas fa-check text-success me-2"></i>10 req/min</li>
<li class="mb-2"><i class="fas fa-check text-success me-2"></i>500 req/@T("mês", "mes")</li>
<li class="mb-2"><i class="fas fa-check text-success me-2"></i>PNG @T("e", "ha") WebP</li>
<li class="mb-2 text-muted"><i class="fas fa-times me-2"></i>@T("Suporte prioritário", "Soporte prioritario")</li>
</ul>
</div>
<div class="card-footer bg-white text-center pb-4">
@if (currentTier == ApiPlanTier.Free)
{
<span class="badge bg-secondary px-3 py-2">@T("Plano atual", "Plan actual")</span>
}
else
{
<span class="text-muted small">@T("Plano gratuito", "Plan gratuito")</span>
}
</div>
</div>
</div>
<!-- Starter -->
<div class="col-md-6 col-lg-3">
<div class="card h-100 border-0 shadow-sm @(currentTier == ApiPlanTier.Starter ? "border border-primary border-2" : "")">
<div class="card-header bg-primary text-white text-center py-3">
<h5 class="mb-0">Starter</h5>
</div>
<div class="card-body text-center">
<div class="display-5 fw-bold my-3">R$29</div>
<p class="text-muted small">@T("por mês", "por mes")</p>
<ul class="list-unstyled text-start small mt-3">
<li class="mb-2"><i class="fas fa-check text-success me-2"></i>@T("Créditos inclusos na cota", "Créditos incluidos en la cuota")</li>
<li class="mb-2"><i class="fas fa-check text-success me-2"></i>50 req/min</li>
<li class="mb-2"><i class="fas fa-check text-success me-2"></i>10.000 req/@T("mês", "mes")</li>
<li class="mb-2"><i class="fas fa-check text-success me-2"></i>PNG, WebP @T("e", "ha") SVG</li>
<li class="mb-2"><i class="fas fa-check text-success me-2"></i>@T("Suporte por e-mail", "Soporte por e-mail")</li>
</ul>
</div>
<div class="card-footer bg-white text-center pb-4">
@if (currentTier == ApiPlanTier.Starter)
{
<span class="badge bg-primary px-3 py-2">@T("Plano atual", "Plan actual")</span>
}
else
{
<form method="post" asp-action="SubscribeApi" asp-controller="Developer">
<input type="hidden" name="planTier" value="Starter">
<button class="btn btn-primary w-100" type="submit">@T("Assinar Starter", "Suscribir Starter")</button>
</form>
}
</div>
</div>
</div>
<!-- Pro -->
<div class="col-md-6 col-lg-3">
<div class="card h-100 border-0 shadow @(currentTier == ApiPlanTier.Pro ? "border border-warning border-2" : "border border-warning")">
<div class="card-header bg-warning text-dark text-center py-3 position-relative">
<h5 class="mb-0">Pro</h5>
<span class="position-absolute top-0 end-0 translate-middle badge bg-danger" style="font-size:.6rem;">@T("Popular", "Popular")</span>
</div>
<div class="card-body text-center">
<div class="display-5 fw-bold my-3">R$99</div>
<p class="text-muted small">@T("por mês", "por mes")</p>
<ul class="list-unstyled text-start small mt-3">
<li class="mb-2"><i class="fas fa-check text-success me-2"></i>@T("Créditos inclusos na cota", "Créditos incluidos en la cuota")</li>
<li class="mb-2"><i class="fas fa-check text-success me-2"></i>200 req/min</li>
<li class="mb-2"><i class="fas fa-check text-success me-2"></i>100.000 req/@T("mês", "mes")</li>
<li class="mb-2"><i class="fas fa-check text-success me-2"></i>PNG, WebP @T("e", "ha") SVG</li>
<li class="mb-2"><i class="fas fa-check text-success me-2"></i>@T("Suporte prioritário", "Soporte prioritario")</li>
</ul>
</div>
<div class="card-footer bg-white text-center pb-4">
@if (currentTier == ApiPlanTier.Pro)
{
<span class="badge bg-warning text-dark px-3 py-2">@T("Plano atual", "Plan actual")</span>
}
else
{
<form method="post" asp-action="SubscribeApi" asp-controller="Developer">
<input type="hidden" name="planTier" value="Pro">
<button class="btn btn-warning fw-bold w-100" type="submit">@T("Assinar Pro", "Suscribir Pro")</button>
</form>
}
</div>
</div>
</div>
<!-- Business -->
<div class="col-md-6 col-lg-3">
<div class="card h-100 border-0 shadow-sm @(currentTier == ApiPlanTier.Business ? "border border-success border-2" : "")">
<div class="card-header bg-success text-white text-center py-3">
<h5 class="mb-0">Business</h5>
</div>
<div class="card-body text-center">
<div class="display-5 fw-bold my-3">R$299</div>
<p class="text-muted small">@T("por mês", "por mes")</p>
<ul class="list-unstyled text-start small mt-3">
<li class="mb-2"><i class="fas fa-check text-success me-2"></i>@T("Créditos inclusos na cota", "Créditos incluidos en la cuota")</li>
<li class="mb-2"><i class="fas fa-check text-success me-2"></i>500 req/min</li>
<li class="mb-2"><i class="fas fa-check text-success me-2"></i>500.000 req/@T("mês", "mes")</li>
<li class="mb-2"><i class="fas fa-check text-success me-2"></i>PNG, WebP @T("e", "ha") SVG</li>
<li class="mb-2"><i class="fas fa-check text-success me-2"></i>@T("Suporte dedicado + SLA", "Soporte dedicado + SLA")</li>
</ul>
</div>
<div class="card-footer bg-white text-center pb-4">
@if (currentTier == ApiPlanTier.Business)
{
<span class="badge bg-success px-3 py-2">@T("Plano atual", "Plan actual")</span>
}
else
{
<form method="post" asp-action="SubscribeApi" asp-controller="Developer">
<input type="hidden" name="planTier" value="Business">
<button class="btn btn-success w-100" type="submit">@T("Assinar Business", "Suscribir Business")</button>
</form>
}
</div>
</div>
</div>
</div>
<!-- Nota de créditos separados -->
<div class="alert alert-info mt-4 text-center">
<i class="fas fa-info-circle me-2"></i>
@T("A assinatura de API é", "La suscripción de API es")
<strong>@T("independente", "independiente")</strong>
@T("dos créditos de QR do site. Os planos pagos liberam rate limits maiores para a API. Créditos de QR continuam sendo comprados separadamente.",
"de los créditos de QR del sitio. Los planes pagos liberan rate limits mayores para la API. Los créditos de QR se compran por separado.")
</div>
<div class="text-center mt-3">
<a href="@devBase" class="btn btn-outline-secondary">
<i class="fas fa-arrow-left me-2"></i>@T("Voltar ao Portal", "Volver al Portal")
</a>
</div>
</div>