-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathindex.html
More file actions
221 lines (201 loc) · 10.5 KB
/
Copy pathindex.html
File metadata and controls
221 lines (201 loc) · 10.5 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
<!DOCTYPE html>
<html lang="pt-br">
<head>
<link rel="stylesheet" href="/css/base.css">
<link rel="stylesheet" href="/css/layout.css">
<link rel="stylesheet" href="/css/cards.css">
<link rel="stylesheet" href="/css/mobile.css">
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Fabiano Cesar | Desenvolvedor</title>
<script src="https://cdn.tailwindcss.com"></script>
<script>
tailwind.config = {
darkMode: 'media', // Detecta preferência do sistema
theme: { extend: {} },
};
</script>
<!-- Estilo para fade ao trocar idioma -->
<style>
.fade-text { transition: opacity 0.3s ease; opacity: 1; }
.fade-out { opacity: 0; }
</style>
</head>
<body class="bg-gray-50 dark:bg-gray-900 text-gray-800 dark:text-gray-200 font-sans transition-colors duration-500">
<!-- Header -->
<header class="bg-white dark:bg-gray-800 shadow-md">
<div class="max-w-6xl mx-auto px-6 py-4 flex justify-between items-center">
<h1 class="text-xl font-bold">Fabiano Cesar</h1>
<div class="flex items-center space-x-4">
<nav class="space-x-4">
<a href="#sobre" class="hover:text-blue-600 dark:hover:text-blue-400 fade-text" data-lang="header_about">Sobre</a>
<a href="#projetos" class="hover:text-blue-600 dark:hover:text-blue-400 fade-text" data-lang="header_projects">Projetos</a>
<a href="#contato" class="hover:text-blue-600 dark:hover:text-blue-400 fade-text" data-lang="header_contact">Contato</a>
</nav>
<div class="language-switcher flex space-x-2 text-xl">
<button class="lang-btn" data-lang-code="pt-br" aria-label="Português">
<img src="/flags/br.svg" alt="Português (Brasil)" width="16" height="16">
</button>
<button class="lang-btn" data-lang-code="en" aria-label="English">
<img src="/flags/us.svg" alt="English (US)" width="16" height="16">
</button>
<button class="lang-btn" data-lang-code="es" aria-label="Español">
<img src="/flags/es.svg" alt="Español" width="16" height="16">
</button>
</div>
</div>
</div>
</header>
<!-- Hero Section -->
<section class="text-center py-20 px-6 bg-blue-100 dark:bg-blue-900 transition-colors duration-500">
<h2 class="text-4xl font-bold mb-4 fade-text" data-lang="hero_title">Olá, eu sou Fabiano Cesar</h2>
<p class="text-lg max-w-xl mx-auto mb-6 fade-text" data-lang="hero_subtitle">
Desenvolvedor full-stack focado em soluções modernas e eficientes.
</p>
<a href="#contato" class="bg-blue-600 text-white px-6 py-3 rounded-full shadow hover:bg-blue-700 dark:bg-blue-700 dark:hover:bg-blue-600 transition fade-text" data-lang="hero_cta">
Fale comigo
</a>
</section>
<!-- Sobre Section -->
<section id="sobre" class="py-16 px-6 max-w-3xl mx-auto text-center">
<h3 class="text-2xl font-semibold mb-4 fade-text" data-lang="about_title">Sobre mim</h3>
<p class="text-gray-700 dark:text-gray-300 fade-text" data-lang="about_p1">
Sou desenvolvedor apaixonado por criar soluções que unem eficiência e experiência do usuário.
</p>
<p class="mt-4 text-gray-700 dark:text-gray-300 fade-text" data-lang="about_p2">
Tenho experiência com aplicações web e mobile, sempre buscando novas tecnologias e boas práticas.
</p>
</section>
<!-- Projetos Section -->
<section id="projetos" class="bg-white dark:bg-gray-800 py-16 px-6 transition-colors duration-500">
<div class="max-w-6xl mx-auto text-center">
<h3 class="text-2xl font-semibold mb-10 fade-text" data-lang="projects_title">Projetos Recentes</h3>
<div id="repos-container" class="grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-8 text-left"></div>
</div>
</section>
<!-- Projetos Legado -->
<section id="projeto_legado" class="bg-white dark:bg-gray-800 py-16 px-6 transition-colors duration-500">
<div class="max-w-6xl mx-auto text-center">
<h3 class="text-2xl font-semibold mb-10 fade-text" data-lang="legacy_title">Projetos Legados</h3>
<div class="grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-8 text-left">
<div class="bg-gray-100 dark:bg-gray-700 p-6 rounded-xl shadow hover:shadow-lg transition">
<h4 class="font-bold mb-2">Software de Colônia de Pescadores (2004)</h4>
<p class="text-gray-700 dark:text-gray-300 text-sm mb-2">
Sistema para administração de associados e integração com o MAPA.
</p>
<p class="text-xs text-gray-500 dark:text-gray-400">Tecnologias: Delphi, Firebird, Rational Rose</p>
</div>
<div class="bg-gray-100 dark:bg-gray-700 p-6 rounded-xl shadow hover:shadow-lg transition">
<h4 class="font-bold mb-2">App para Sindicatos e Colônias (2017)</h4>
<p class="text-gray-700 dark:text-gray-300 text-sm mb-2">
Gerencia associados, anuidades, documentação junto ao MAPA e alertas automáticos.
</p>
<p class="text-xs text-gray-500 dark:text-gray-400">Tecnologias: Java, Kotlin, SQLite, Rational Rose e Scrum</p>
</div>
<div class="bg-gray-100 dark:bg-gray-700 p-6 rounded-xl shadow hover:shadow-lg transition">
<h4 class="font-bold mb-2">Amigo do Pescador (2020)</h4>
<p class="text-gray-700 dark:text-gray-300 text-sm mb-2">
App informativo sobre marés, fases da lua e períodos de defeso no Brasil.
</p>
<p class="text-xs text-gray-500 dark:text-gray-400">Tecnologias: Android, Java, Kotlin, SQLite</p>
</div>
<div class="bg-gray-100 dark:bg-gray-700 p-6 rounded-xl shadow hover:shadow-lg transition">
<h4 class="font-bold mb-2">Outros projetos para terceiros (1997-2025)</h4>
<p class="text-gray-700 dark:text-gray-300 text-sm mb-2">
Aplicativos e sites de corretores de seguro saúde, sistemas universitários, manutenção de apps comerciais.
</p>
<p class="text-xs text-gray-500 dark:text-gray-400">
Tecnologias: Android, C, C#, VB, Delphi, HTML/JS, Java, Kotlin, SQLite, SQL Server, DB2, Postgres, MySQL, Oracle
</p>
</div>
</div>
</div>
</section>
<!-- Contato Section -->
<section id="contato" class="py-16 px-6 bg-blue-50 dark:bg-blue-900 text-center transition-colors duration-500">
<div class="max-w-xl mx-auto">
<h3 class="text-2xl font-semibold mb-4 fade-text" data-lang="contact_title">Contato</h3>
<p class="mb-6 text-gray-700 dark:text-gray-300 fade-text" data-lang="contact_subtitle">
Entre em contato comigo através das opções abaixo.
</p>
<div class="space-y-2">
<p>
<strong data-lang="contact_github">GitHub:</strong>
<a href="https://github.com/facrf" target="_blank" rel="noopener noreferrer" class="text-blue-600 dark:text-blue-400 hover:underline">
github.com/facrf
</a>
</p>
</div>
</div>
</section>
<!-- Footer -->
<footer class="text-center py-6 text-sm text-gray-500 dark:text-gray-400 bg-white dark:bg-gray-800 transition-colors duration-500" data-lang="footer">
© 2026 Fabiano Cesar. Todos os direitos reservados.
</footer>
<!-- Script JS -->
<script>
const username = "facrf";
const reposContainer = document.getElementById("repos-container");
const elementsToTranslate = document.querySelectorAll("[data-lang]");
const langBtns = document.querySelectorAll(".lang-btn");
function translatePage(translations, lang) {
elementsToTranslate.forEach(element => {
const key = element.getAttribute("data-lang");
if (translations[lang] && translations[lang][key]) {
element.classList.add("fade-out");
setTimeout(() => {
element.textContent = translations[lang][key];
element.classList.remove("fade-out");
}, 300);
}
});
}
function loadTranslationsAndRepos(selectedLang = null) {
const userLang = (selectedLang || navigator.language || navigator.userLanguage).toLowerCase();
fetch('traducoes.json')
.then(res => res.json())
.then(translations => {
const chosenLang = translations[userLang] ? userLang : (translations[userLang.split('-')[0]] ? userLang.split('-')[0] : 'pt-br');
translatePage(translations, chosenLang);
fetch(`https://api.github.com/users/${username}/repos?sort=updated`)
.then(res => res.json())
.then(repos => {
reposContainer.innerHTML = '';
repos.forEach(repo => {
if (repo.fork) return;
const repoDescription = repo.description || translations[chosenLang]?.github_no_description || translations['pt-br'].github_no_description;
const repoLanguage = translations[chosenLang]?.github_language || translations['pt-br'].github_language;
const viewOnGitHubText = translations[chosenLang]?.github_view || translations['pt-br'].github_view;
const card = document.createElement("div");
card.className = "bg-gray-100 dark:bg-gray-700 p-6 rounded-xl shadow hover:shadow-lg transition";
card.innerHTML = `
<h4 class="font-bold mb-2">${repo.name}</h4>
<p class="text-gray-700 dark:text-gray-300 text-sm mb-2">${repoDescription}</p>
<p class="text-xs text-gray-500 dark:text-gray-400 mb-2">${repoLanguage}: ${repo.language || "N/A"}</p>
<a href="${repo.html_url}" target="_blank" rel="noopener noreferrer" class="text-blue-600 dark:text-blue-400 text-sm hover:underline">${viewOnGitHubText}</a>
`;
reposContainer.appendChild(card);
});
})
.catch(err => {
reposContainer.innerHTML = "<p>Erro ao carregar projetos do GitHub.</p>";
console.error(err);
});
})
.catch(err => {
console.error("Erro ao carregar traduções:", err);
});
}
// Botões de idioma
langBtns.forEach(btn => {
btn.addEventListener('click', (e) => {
e.preventDefault();
const langCode = btn.getAttribute('data-lang-code');
loadTranslationsAndRepos(langCode);
});
});
// Inicializa detectando idioma do usuário
loadTranslationsAndRepos();
</script>
</body>
</html>