diff --git a/Controllers/HomeController.cs b/Controllers/HomeController.cs
index 5314e1d..fabfabb 100644
--- a/Controllers/HomeController.cs
+++ b/Controllers/HomeController.cs
@@ -297,6 +297,24 @@ namespace QRRapidoApp.Controllers
}
}
+ [Route("developers")]
+ [Route("es/developers")]
+ [Route("en/developers")]
+ public IActionResult Developers()
+ {
+ var userId = User?.FindFirst(ClaimTypes.NameIdentifier)?.Value;
+
+ ViewBag.ShowAds = _adDisplayService.ShouldShowAds(userId).Result;
+ ViewBag.IsPremium = _adDisplayService.HasValidPremiumSubscription(userId ?? "").Result;
+ ViewBag.IsAuthenticated = User?.Identity?.IsAuthenticated ?? false;
+ ViewBag.UserName = User?.Identity?.Name ?? "";
+ ViewBag.Title = "API para Desenvolvedores — QR Rapido";
+ ViewBag.Description = "Gere QR codes na sua aplicação via API REST. Suporte a PNG, WebP e SVG. Planos a partir de R$0.";
+ _adDisplayService.SetViewBagAds(ViewBag);
+
+ return View();
+ }
+
// Health check endpoint
[Route("health")]
public IActionResult Health()
@@ -335,6 +353,9 @@ namespace QRRapidoApp.Controllers
// Core entry points
AppendUrl("/", "daily", "1.0");
AppendUrl("/es", "daily", "0.9");
+ AppendUrl("/developers", "monthly", "0.8");
+ AppendUrl("/es/developers", "monthly", "0.7");
+ AppendUrl("/en/developers", "monthly", "0.7");
// Tools (Landing Pages)
var tools = new[] { "pix", "wifi", "vcard", "whatsapp", "email", "sms", "texto", "url" };
diff --git a/Resources/SharedResource.en.resx b/Resources/SharedResource.en.resx
index 5b63abc..e332178 100644
--- a/Resources/SharedResource.en.resx
+++ b/Resources/SharedResource.en.resx
@@ -2326,4 +2326,19 @@
+ @T("Integração simples, resposta rápida, múltiplos formatos de imagem.",
+ "Integración simple, respuesta rápida, múltiples formatos de imagen.",
+ "Simple integration, fast response, multiple image formats.")
+
+
+ @T("Plano Free inclui 5 QRs grátis e 500 requisições/mês",
+ "Plan Free incluye 5 QRs gratis y 500 solicitudes/mes",
+ "Free plan includes 5 QRs and 500 requests/month")
+ @T("Três passos para integrar QR codes na sua stack", "Tres pasos para integrar QR codes en tu stack", "Three steps to integrate QR codes into your stack") @T("Cadastro gratuito com Google ou Microsoft. Nenhum cartão necessário para começar.", "Registro gratuito con Google o Microsoft. No se necesita tarjeta para empezar.", "Free sign-up with Google or Microsoft. No card needed to start.") @T("No portal do desenvolvedor, crie uma chave em segundos. Até 5 chaves ativas por conta.", "En el portal del desarrollador, creá una clave en segundos. Hasta 5 claves activas por cuenta.", "In the developer portal, create a key in seconds. Up to 5 active keys per account.") @T("Envie um POST com o conteúdo e receba o QR como PNG, WebP ou SVG.", "Enviá un POST con el contenido y recibí el QR como PNG, WebP o SVG.", "Send a POST with the content and receive the QR as PNG, WebP or SVG.") @T("Escolha o formato ideal para cada caso de uso", "Elegí el formato ideal para cada caso de uso", "Choose the ideal format for each use case") @T("Funciona em qualquer plataforma, navegador e sistema operacional. Ideal para e-mail, impressão e exibição em telas.", "Funciona en cualquier plataforma, navegador y sistema operativo. Ideal para e-mail, impresión y visualización en pantallas.", "Works on any platform, browser and OS. Ideal for email, printing and screen display.") @T("Até 30% menor que PNG. Perfeito para aplicações web e mobile onde performance importa.", "Hasta 30% más pequeño que PNG. Perfecto para aplicaciones web y mobile donde el rendimiento importa.", "Up to 30% smaller than PNG. Perfect for web and mobile apps where performance matters.") @T("Qualidade perfeita em qualquer tamanho, de um crachá a um outdoor. Arquivo menor e personalizável via CSS.", "Calidad perfecta en cualquier tamaño, desde una credencial hasta una cartelera. Archivo más pequeño y personalizable vía CSS.", "Perfect quality at any size, from a badge to a billboard. Smaller file and customizable via CSS.") @T("Uma chamada. Um QR code. Em qualquer linguagem.", "Una llamada. Un QR code. En cualquier lenguaje.", "One call. One QR code. In any language.") @T("Passe o campo", "Pasá el campo", "Pass the field") @T("De projetos pessoais a sistemas de alto volume.", "De proyectos personales a sistemas de alto volumen.", "From personal projects to high-volume systems.") @T("Crie sua conta, gere sua chave e faça o primeiro QR em menos de 2 minutos.", "Creá tu cuenta, generá tu clave y hacé el primer QR en menos de 2 minutos.", "Create your account, generate your key and make the first QR in under 2 minutes.")
+ @Localizer["ForDevelopersDesc"]
+
+ @T("Gere QR codes diretamente na sua aplicação",
+ "Generá QR codes directamente en tu aplicación",
+ "Generate QR codes directly in your application")
+
+ @T("Como funciona", "Cómo funciona", "How it works")
+ @T("Crie sua conta", "Creá tu cuenta", "Create your account")
+ @T("Gere sua API key", "Generá tu API key", "Generate your API key")
+ @T("Faça sua primeira chamada", "Hacé tu primera llamada", "Make your first call")
+ @T("Formatos de imagem suportados", "Formatos de imagen soportados", "Supported image formats")
+ @T("Compatibilidade universal", "Compatibilidad universal", "Universal compatibility")
+ @T("Menor tamanho, alta qualidade", "Menor tamaño, alta calidad", "Smaller size, high quality")
+ @T("Vetorial, escala infinita", "Vectorial, escala infinita", "Vector, infinite scale")
+ @T("Fácil de integrar", "Fácil de integrar", "Easy to integrate")
+
+
+ curl -X POST https://qrrapido.site/api/v1/QRManager/generate \
+ -H "X-API-Key: qr_SuaChaveAqui" \
+ -H "Content-Type: application/json" \
+ -d '{
+ "content": "https://seusite.com.br",
+ "type": "url",
+ "outputFormat": "png"
+ }' \
+ --output qrcode.png
+
+ const response = await fetch(
+ 'https://qrrapido.site/api/v1/QRManager/generate',
+ {
+ method: 'POST',
+ headers: {
+ 'X-API-Key': 'qr_SuaChaveAqui',
+ 'Content-Type': 'application/json'
+ },
+ body: JSON.stringify({
+ content: 'https://seusite.com.br',
+ type: 'url',
+ outputFormat: 'webp' // 'png' | 'webp' | 'svg'
+ })
+ }
+);
+
+const blob = await response.blob();
+const url = URL.createObjectURL(blob);
+document.querySelector('#qr-img').src = url;
+
+ import requests
+
+response = requests.post(
+ 'https://qrrapido.site/api/v1/QRManager/generate',
+ headers={
+ 'X-API-Key': 'qr_SuaChaveAqui',
+ 'Content-Type': 'application/json'
+ },
+ json={
+ 'content': 'https://seusite.com.br',
+ 'type': 'url',
+ 'outputFormat': 'svg' # 'png' | 'webp' | 'svg'
+ }
+)
+
+with open('qrcode.svg', 'wb') as f:
+ f.write(response.content)Content-Type: image/png@T(" | ", " | ", " | ")image/webp@T(" | ", " | ", " | ")image/svg+xml
+ @T("Tipos de QR suportados", "Tipos de QR soportados", "Supported QR types")
+ type @T("na requisição", "en la solicitud", "in the request")@item.Item1
+ @T("Planos para cada escala", "Planes para cada escala", "Plans for every scale")
+ Free
+
+
+ Starter
+
+
+ Pro
+ @T("Popular","Popular","Popular")
+
+
+ Business
+
+
+ @T("Pronto para integrar?", "¿Listo para integrar?", "Ready to integrate?")
+
+ @Localizer["ForDevelopers"]
+
+