Skip to content

Instantly share code, notes, and snippets.

View wharley's full-sized avatar
🏠
Working from home

Wharley wharley

🏠
Working from home
View GitHub Profile

Análise de Preços para Tradução Automática (Setembro 2025)

Para escolher a melhor solução de tradução automática de orderbumps (1M caracteres/mês, ~2.000 orderbumps), comparo bibliotecas (translate npm) e APIs pagas (Azure, Google, AWS, DeepL, Yandex). Estimativas baseadas em documentações oficiais de 2025, assumindo 500 caracteres/orderbump.
Abaixo, listo custos, qualidade e como validar para sua apresentação.


Custos e Qualidade

Bibliotecas

@wharley
wharley / analise_apis_endereco.md
Last active September 12, 2025 18:52
Análise de APi's de Autocomplete de Endereços

Análise de APIs de Autocomplete de Endereços

Objetivo: Selecionar uma API de autocomplete de endereços, com foco inicial em Europa e EUA (expansível), alta precisão (~100%), suporte a filtro por país/região e retorno de componentes estruturados (rua, cidade, estado, CEP). Volume estimado: 50.000 requests/mês (~10.000 checkouts, 5 requests/usuário).

APIs Analisadas: Google Places API, Mapbox Address Autofill, TomTom Search API.

1. Google Places API (Autocomplete)

  • Descrição: API líder em geocodificação, com autocomplete por país/região e retorno de rua, cidade, estado, CEP, coordenadas. Usa "sessões" para otimizar cobranças.
  • Cobertura: Global (200+ países), excelente em EUA/Europa. Alta precisão (>95% em áreas urbanas e rurais).
  • Integração: REST API, SDK JS (fácil com Next.js via fetch/axios).
Suporte ao aplicativo Meus Cupons
Se você tiver dúvidas ou encontrar algum problema, envie um e-mail para meuscuponstech@gmail.com.
import { Component, OnInit } from '@angular/core';
import { trackFacebookPixelEvent, trackGoogleAdsConversion } from '@/utils';
@Component({
selector: 'app-root',
templateUrl: './app.component.html',
styleUrls: ['./app.component.css']
})
export class AppComponent implements OnInit {
const checkImageSize = (imageRealWidth, imageRealHeight, minImageSize) => {
return imageRealWidth <= minImageSize ||
imageRealHeight <= minImageSize ||
imageRealWidth < imageWidth ||
imageRealHeight < imageHeight
}
if (checkImageSize(imageRealWidth, imageRealHeight, minImageSize)) {
this.setState({ imageHideZoomIcon: true })
import ComingSoon from './ComingSoon.vue';
/* CUSTOMER */
import Customer from './customer/Customer.vue';
import CustomerList from './customer/CustomerList.vue';
export const views = {
ComingSoon,
/* CUSTOMER */
Customer,
CustomerList,
import Vue from 'vue';
import Router from 'vue-router';
import Main from './views/Main.vue';
Vue.use(Router);
export default new Router({
mode: 'history',
routes: [
{
mapRoutes = [
{
link: 'customer',
name: 'Customer',
routes: [
{
link: 'customer',
name: 'Customer',
routes: [
{
<template>
<transition>
<div class="spinner">
<div class="bounce1"></div>
<div class="bounce2"></div>
<div class="bounce3"></div>
</div>
</transition>
</template>