46setProfileError(null);
47try {
48const response = await fetch("/api/profile");
49if (response.status === 404) {
50setProfile(null);
98setStrategyError(null);
99try {
100const response = await fetch("/api/profile", {
101method: "POST",
102headers: { "Content-Type": "application/json" },
128try {
129// Use POST to trigger generation, profile is fetched server-side
130const response = await fetch("/api/generate-strategy", { method: "POST" });
131const data = await response.json();
132if (!response.ok) {
410const url = new URL(request.url);
411412// --- API Route Handling ---
413if (url.pathname === "/api/profile") {
414// GET Profile (Select new fields)
415if (request.method === "GET") {
475476// --- Generate Strategy Route ---
477if (url.pathname === "/api/generate-strategy" && request.method === "POST") {
478let profile: any = null;
479// 1. Fetch the enhanced profile
business_finder_productionmain.tsx14 matches
44}
4546// Função para buscar empresas reais usando a API do Google Places
47async function buscarEmpresasReais(endereco, tipo) {
48try {
78async function geocodificarEndereco(endereco) {
79try {
80// Usando a API de Geocodificação do Google
81const url = `https://maps.googleapis.com/maps/api/geocode/json?address=${encodeURIComponent(endereco)}&key=YOUR_GOOGLE_API_KEY`;
82
83// Como não temos uma chave real da API do Google, vamos simular a resposta
84// Em produção, você usaria uma chave real e faria a requisição
85
124}
125126// Função para buscar empresas próximas usando a API do Google Places
127async function buscarEmpresasProximas(coordenadas, tipo) {
128try {
129// Em produção, você usaria a API do Google Places
130// const url = `https://maps.googleapis.com/maps/api/place/nearbysearch/json?location=${coordenadas.lat},${coordenadas.lng}&radius=5000&type=${encodeURIComponent(tipo)}&language=pt-BR&key=YOUR_GOOGLE_API_KEY`;
131
132// Como não temos uma chave real da API do Google, vamos gerar dados realistas
133const tiposDeNegocio = {
134"restaurante": [
235}
236237// Função para buscar detalhes de uma empresa usando a API do Google Places
238async function buscarDetalhesEmpresa(placeId) {
239try {
240// Em produção, você usaria a API do Google Places
241// const url = `https://maps.googleapis.com/maps/api/place/details/json?place_id=${placeId}&fields=name,formatted_address,formatted_phone_number,website,opening_hours,rating,reviews,price_level,photos&language=pt-BR&key=YOUR_GOOGLE_API_KEY`;
242
243// Como não temos uma chave real da API do Google, vamos gerar dados realistas
244
245// Gerar horários de funcionamento realistas
755
756<div class="map-container" id="map-${empresa.place_id}">
757<img src="https://maps.googleapis.com/maps/api/staticmap?center=${empresa.latitude},${empresa.longitude}&zoom=15&size=400x200&markers=color:red%7C${empresa.latitude},${empresa.longitude}&key=YOUR_GOOGLE_API_KEY"
758alt="Mapa de localização"
759style="width:100%; height:100%; object-fit:cover;"
949geoButton.addEventListener('click', function() {
950navigator.geolocation.getCurrentPosition(function(position) {
951// Em um ambiente real, você usaria uma API de geocodificação reversa
952// para converter coordenadas em endereço
953const lat = position.coords.latitude;
business_findermain.tsx4 matches
11
12// Aqui simulamos a busca de empresas baseada no endereço e tipo
13// Em uma implementação real, você usaria uma API como Google Places ou similar
14const empresas = await buscarEmpresas(endereco, tipo);
15
4647// Função para simular a busca de empresas
48// Em uma implementação real, você usaria uma API como Google Places
49async function buscarEmpresas(endereco, tipo) {
50// Simulação de dados para demonstração
51// Em um ambiente real, você faria uma chamada para uma API externa
52
53// Aguarda um pouco para simular o tempo de busca
643geoButton.addEventListener('click', function() {
644navigator.geolocation.getCurrentPosition(function(position) {
645// Em um ambiente real, você usaria uma API de geocodificação reversa
646// para converter coordenadas em endereço
647enderecoInput.value = 'Localização atual';
mohitkingsprojectmain.tsx3 matches
92async function fetchCurrencyRates() {
93try {
94const response = await fetch("https://open.exchangerate-api.com/v6/latest");
95const data = await response.json();
96setCurrencyRates(data.rates);
108setLoading(true);
109const response = await fetch(
110"https://api.coingecko.com/api/v3/coins/markets?vs_currency=usd&order=market_cap_desc&per_page=10&page=1&sparkline=false",
111);
112const data = await response.json();
152try {
153const response = await fetch(
154`https://api.coingecko.com/api/v3/coins/${coinId}/market_chart?vs_currency=usd&days=${days}`,
155);
156const data = await response.json();
valProfilePageREADME.md4 matches
64- Hono (server-side)
65- Tailwind CSS (styling)
66- Uses the Charlie's User Search API for fetching user val data
67- Uses Val Town's profile picture proxy for user avatars
6869## API Integration
7071The app integrates with two main APIs:
72731. Charlie's User Search API: `https://charliesusersearch.val.run/?user=USERNAME`
742. Val Town Profile Pic Proxy: `https://pic.val.run/USERNAME`
75
valProfilePageindex.ts3 matches
4const app = new Hono();
56// API endpoint to fetch user profile data
7app.get("/api/profile/:username", async (c) => {
8const username = c.req.param("username");
9
10try {
11// Call the user search API
12const response = await fetch(
13`https://charliesusersearch.val.run/?user=${username}`
84const getImageUrl = () => {
85// Priority order:
86// 1. Val's image_url from API if available
87// 2. moi.md imageUrl if available
88// 3. Return null to use color placeholder
64// Fetch both user profile data and moi config in parallel
65const [profileResponse, config] = await Promise.all([
66fetch(`/api/profile/${username}?page=${currentPage}`),
67fetchMoiConfig(`https://www.val.town/x/${username}/`)
68]);
valProfilePagemoiConfig.tsx1 match
117}
118
119// Fallback: Use Val Town profile pic API
120return `https://pic.val.run/${username}`;
121}
vtProjectSearchstyles.tsx4 matches
782}
783784.api-info {
785margin-top: 10px;
786}
787788.api-info summary {
789cursor: pointer;
790color: var(--primary-color);
792}
793794.api-docs {
795background-color: var(--code-bg);
796padding: 10px 15px;
801}
802803.api-docs code {
804display: inline-block;
805background-color: white;