feat: Setup Black Brasil Links project

Initializes the project with basic structure, including HTML, CSS, and static assets. Updates README with local development instructions and adds .gitignore for common build artifacts.
This commit is contained in:
cauefaleiros
2026-03-31 12:01:44 -03:00
parent e739b22499
commit 5493bcd242
12 changed files with 201 additions and 8 deletions

9
.env.example Normal file
View File

@@ -0,0 +1,9 @@
# GEMINI_API_KEY: Required for Gemini AI API calls.
# AI Studio automatically injects this at runtime from user secrets.
# Users configure this via the Secrets panel in the AI Studio UI.
GEMINI_API_KEY="MY_GEMINI_API_KEY"
# APP_URL: The URL where this applet is hosted.
# AI Studio automatically injects this at runtime with the Cloud Run service URL.
# Used for self-referential links, OAuth callbacks, and API endpoints.
APP_URL="MY_APP_URL"

8
.gitignore vendored Normal file
View File

@@ -0,0 +1,8 @@
node_modules/
build/
dist/
coverage/
.DS_Store
*.log
.env*
!.env.example

View File

@@ -1,11 +1,20 @@
<div align="center"> <div align="center">
<img width="1200" height="475" alt="GHBanner" src="https://github.com/user-attachments/assets/0aa67016-6eaf-458a-adb2-6e31a0763ed6" /> <img width="1200" height="475" alt="GHBanner" src="https://github.com/user-attachments/assets/0aa67016-6eaf-458a-adb2-6e31a0763ed6" />
<h1>Built with AI Studio</h2>
<p>The fastest path from prompt to production with Gemini.</p>
<a href="https://aistudio.google.com/apps">Start building</a>
</div> </div>
# Run and deploy your AI Studio app
This contains everything you need to run your app locally.
View your app in AI Studio: https://ai.studio/apps/48cc4bc1-d0c3-44bc-960d-1428c57a80b6
## Run Locally
**Prerequisites:** Node.js
1. Install dependencies:
`npm install`
2. Set the `GEMINI_API_KEY` in [.env.local](.env.local) to your Gemini API key
3. Run the app:
`npm run dev`

BIN
apple-touch-icon.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.8 KiB

BIN
background.jpg Normal file

Binary file not shown.

BIN
favicon-192x192.png Normal file

Binary file not shown.

BIN
favicon-32x32.png Normal file

Binary file not shown.

124
index.html Normal file
View File

@@ -0,0 +1,124 @@
<!DOCTYPE html>
<html lang="pt-BR">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Black Brasil</title>
<!-- Favicons -->
<link rel="icon" type="image/png" sizes="32x32" href="favicon-32x32.png">
<link rel="icon" type="image/png" sizes="192x192" href="favicon-192x192.png">
<link rel="apple-touch-icon" sizes="180x180" href="apple-touch-icon.png">
<!-- Google Fonts -->
<link rel="preconnect" href="https://fonts.googleapis.com">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link href="https://fonts.googleapis.com/css2?family=Montserrat:wght@400;600;700&display=swap" rel="stylesheet">
<style>
* {
box-sizing: border-box;
margin: 0;
padding: 0;
}
body {
font-family: 'Montserrat', 'Helvetica Neue', sans-serif;
background-image: url('background.jpg'); /* Placeholder for background image */
background-size: cover;
background-position: center top;
background-attachment: fixed;
background-color: #111; /* Fallback color */
color: #FFFFFF;
display: flex;
flex-direction: column;
justify-content: flex-start;
align-items: center;
min-height: 100vh;
padding: 12vh 20px 40px 20px;
}
.container {
width: 100%;
max-width: 600px;
display: flex;
flex-direction: column;
align-items: center;
text-align: center;
}
.logo {
max-width: 200px;
width: 100%;
height: auto;
margin-bottom: 20px;
}
.description {
font-size: 15px;
line-height: 1.5;
margin-bottom: 30px;
padding: 0 10px;
}
.links-container {
width: 100%;
display: flex;
flex-direction: column;
gap: 15px;
}
.link-button {
display: flex;
justify-content: center;
align-items: center;
width: 100%;
background-color: #FEDB2C;
color: #000000;
text-decoration: none;
padding: 15px 20px;
font-weight: 600;
font-size: 16px;
transition: all 0.3s ease;
}
.link-button:hover {
opacity: 0.85;
transform: translateY(-2px);
}
</style>
</head>
<body>
<div class="container">
<!-- Logo -->
<img src="logo.png" alt="Black Brasil Logo" class="logo">
<!-- Description -->
<p class="description">
A Black Brasil foi criada com o objetivo de superar expectativas e oferecer ao mercado nacional e internacional produtos químicos de qualidade incomparável.
</p>
<!-- Buttons -->
<div class="links-container">
<a href="https://wa.me/5516991519810" class="link-button" target="_blank" rel="noopener noreferrer">
Seja um Distribuidor Autorizado
</a>
<a href="https://blackbrasil.com.br/" class="link-button" target="_blank" rel="noopener noreferrer">
Loja Online
</a>
<a href="https://blog.blackbrasil.com.br/" class="link-button" target="_blank" rel="noopener noreferrer">
Blog Black Brasil
</a>
<a href="https://links.blackbrasil.com.br/wp-content/uploads/2024/12/Catalogo-Black-Brasil-Web.pdf" class="link-button" target="_blank" rel="noopener noreferrer">
Catálogo
</a>
<a href="https://wa.me/5516991519810" class="link-button" target="_blank" rel="noopener noreferrer">
Fale com um Consultor
</a>
</div>
</div>
</body>
</html>

BIN
logo.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 42 KiB

5
metadata.json Normal file
View File

@@ -0,0 +1,5 @@
{
"name": "Black Brasil Links",
"description": "A Linktree-style page for Black Brasil.",
"requestFramePermissions": []
}

14
package.json Normal file
View File

@@ -0,0 +1,14 @@
{
"name": "black-brasil-links",
"private": true,
"version": "0.0.0",
"type": "module",
"scripts": {
"dev": "vite",
"build": "vite build",
"preview": "vite preview"
},
"devDependencies": {
"vite": "^6.2.0"
}
}

24
vite.config.ts Normal file
View File

@@ -0,0 +1,24 @@
import tailwindcss from '@tailwindcss/vite';
import react from '@vitejs/plugin-react';
import path from 'path';
import {defineConfig, loadEnv} from 'vite';
export default defineConfig(({mode}) => {
const env = loadEnv(mode, '.', '');
return {
plugins: [react(), tailwindcss()],
define: {
'process.env.GEMINI_API_KEY': JSON.stringify(env.GEMINI_API_KEY),
},
resolve: {
alias: {
'@': path.resolve(__dirname, '.'),
},
},
server: {
// HMR is disabled in AI Studio via DISABLE_HMR env var.
// Do not modify—file watching is disabled to prevent flickering during agent edits.
hmr: process.env.DISABLE_HMR !== 'true',
},
};
});