Skip to content

πŸš€ PortfΓ³lio Interativo desenvolvido com Flutter Web. Demonstra Clean Architecture, Provider, FΓ­sica MagnΓ©tica (Gravity), Glassmorphism e Cards 3D HologrΓ‘ficos.

Notifications You must be signed in to change notification settings

Franklyn-R-Silva/meu_curriculo_flutter

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

πŸš€ Meu PortfΓ³lio - Flutter Web Experience

Tech Stack

Architecture State Management Backend Design Pattern

Um portfΓ³lio interativo e responsivo desenvolvido com Flutter Web, integrando Supabase como backend e demonstrando arquitetura profissional, UI/UX avanΓ§ada, animaΓ§Γ΅es complexas e gerenciamento de estado robusto.


🎨 Funcionalidades & Destaques

Este projeto vai alΓ©m de uma simples landing page estΓ‘tica. Ele implementa conceitos avanΓ§ados de renderizaΓ§Γ£o, interatividade e arquitetura:

🎯 Funcionalidades Principais

  • πŸ” Sistema de AutenticaΓ§Γ£o: Login com Supabase Auth e persistΓͺncia de sessΓ£o
  • πŸ“Š Painel Admin (CRUD Completo): Gerenciamento de projetos, experiΓͺncias, habilidades e certificados em tempo real
  • 🌐 InternacionalizaΓ§Γ£o (i18n): Suporte para mΓΊltiplos idiomas (PT-BR e EN)
  • πŸŒ“ Dark Mode: AlternΓ’ncia entre tema claro e escuro com persistΓͺncia

✨ UI/UX Avançada

  • 🌌 Hero Section com FΓ­sica: Ícones de tecnologia com efeito magnΓ©tico reverso (repulsΓ£o ao mouse)
  • 🧊 Header Glassmorphism: NavegaΓ§Γ£o flutuante com blur e transparΓͺncia dinΓ’mica
  • πŸ–₯️ Cards HologrΓ‘ficos 3D: Efeito tilt 3D seguindo o cursor com iluminaΓ§Γ£o dinΓ’mica
  • ⚑ AnimaΓ§Γ΅es Fluidas: Micro-interaΓ§Γ΅es com flutter_animate e animaΓ§Γ΅es customizadas
  • πŸ“± Totalmente Responsivo: Layout adaptativo para Mobile, Tablet e Desktop
  • 🎬 Intro Animada: Loading screen estilo terminal hacker com efeitos de digitaΓ§Γ£o

πŸ› οΈ Stack TecnolΓ³gica

Core

Arquitetura & PadrΓ΅es

  • PadrΓ£o de Projeto: MVVM + Repository Pattern + Clean Architecture Elements
  • GerΓͺncia de Estado: provider (ChangeNotifier)
  • InjeΓ§Γ£o de DependΓͺncia: Provider DI
  • Design System: Atomic Design (Atoms β†’ Molecules β†’ Organisms)

Bibliotecas Principais

  • AnimaΓ§Γ΅es: flutter_animate, AnimationController customizados
  • UI Components: google_fonts, font_awesome_flutter
  • Networking: supabase_flutter, http
  • Utilidades: url_launcher, flutter_dotenv
  • InternacionalizaΓ§Γ£o: flutter_localizations, ARB files

πŸ“‚ Estrutura do Projeto (Clean Architecture)

O projeto segue uma estrutura Atomic Design misturada com Clean Architecture para garantir escalabilidade e manutenΓ§Γ£o:

lib/
β”œβ”€β”€ core/                  # ConfiguraΓ§Γ΅es globais (Temas, Constantes, Utils)
β”œβ”€β”€ data/                  # Camada de Dados
β”‚   β”œβ”€β”€ mocks/             # Dados estΓ‘ticos (CurrΓ­culo, Projetos)
β”‚   β”œβ”€β”€ models/            # Modelos de dados (ProjectModel, SkillModel)
β”‚   └── repositories/      # Contratos e ImplementaΓ§Γ΅es de RepositΓ³rio
β”œβ”€β”€ presentation/          # Camada de UI
β”‚   β”œβ”€β”€ controllers/       # LΓ³gica de Estado (PortfolioController)
β”‚   β”œβ”€β”€ pages/             # Telas principais (HomePage)
β”‚   └── widgets/           # Componentes Visuais (Atomic Design)
β”‚       β”œβ”€β”€ atoms/         # BotΓ΅es, Chips, Elementos MagnΓ©ticos
β”‚       β”œβ”€β”€ molecules/     # Cards Interativos (ProjectCard, ExperienceCard)
β”‚       └── organisms/     # SeΓ§Γ΅es completas (Hero, Skills, Projects)
└── main.dart              # Ponto de entrada e InjeΓ§Γ£o de DependΓͺncias

πŸ—οΈ Arquitetura do Projeto

PadrΓ£o Arquitetural: MVVM + Repository Pattern + Clean Architecture Elements

O projeto implementa uma arquitetura hΓ­brida robusta que combina os melhores aspectos de MVVM, Repository Pattern e Clean Architecture:

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚                        PRESENTATION LAYER                           β”‚
β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”           β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”     β”‚
β”‚  β”‚                β”‚  Provider β”‚                              β”‚     β”‚
β”‚  β”‚     VIEW       │◄─────────►│      VIEW MODEL              β”‚     β”‚
β”‚  β”‚   (Pages +     β”‚   Binding β”‚    (Controllers)             β”‚     β”‚
β”‚  β”‚    Widgets)    β”‚           β”‚                              β”‚     β”‚
β”‚  β”‚                β”‚           β”‚ β€’ PortfolioController        β”‚     β”‚
β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜           β”‚ β€’ AuthController             β”‚     β”‚
β”‚   β€’ home_page.dart            β”‚                              β”‚     β”‚
β”‚   β€’ admin_dashboard_page.dart β”‚ State Management: Provider   β”‚     β”‚
β”‚   β€’ Atomic Design Components  β”‚ (ChangeNotifier Pattern)     β”‚     β”‚
β”‚                                β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜     β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
                                                β”‚
                                                β”‚ Dependency
                                                β”‚ Injection
                                                ↓
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚                          DATA LAYER                                 β”‚
β”‚                                                                     β”‚
β”‚   β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”     β”‚
β”‚   β”‚          Repository Interface (Contract)                β”‚     β”‚
β”‚   β”‚                                                         β”‚     β”‚
β”‚   β”‚      abstract class IPortfolioRepository {             β”‚     β”‚
β”‚   β”‚        Future<List<Project>> getProjects();            β”‚     β”‚
β”‚   β”‚        Future<void> addProject(Project project);       β”‚     β”‚
β”‚   β”‚      }                                                  β”‚     β”‚
β”‚   β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜     β”‚
β”‚                           β”‚ implements                            β”‚
β”‚                           ↓                                       β”‚
β”‚   β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”     β”‚
β”‚   β”‚    Repository Implementation                            β”‚     β”‚
β”‚   β”‚                                                         β”‚     β”‚
β”‚   β”‚    class SupabaseRepository                            β”‚     β”‚
β”‚   β”‚    implements IPortfolioRepository {                   β”‚     β”‚
β”‚   β”‚                                                         β”‚     β”‚
β”‚   β”‚      β€’ getProjects()                                   β”‚     β”‚
β”‚   β”‚      β€’ getExperiences()                                β”‚     β”‚
β”‚   β”‚      β€’ getSkills()                                     β”‚     β”‚
β”‚   β”‚      β€’ getCertificates()                               β”‚     β”‚
β”‚   β”‚      β€’ CRUD Operations                                 β”‚     β”‚
β”‚   β”‚      β€’ Error Handling                                  β”‚     β”‚
β”‚   β”‚      β€’ Logging                                         β”‚     β”‚
β”‚   β”‚    }                                                    β”‚     β”‚
β”‚   β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜     β”‚
β”‚                           β”‚                                       β”‚
β”‚                           ↓                                       β”‚
β”‚   β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”     β”‚
β”‚   β”‚              MODELS (Entities)                          β”‚     β”‚
β”‚   β”‚                                                         β”‚     β”‚
β”‚   β”‚   β€’ ProjectModel         β€’ SkillModel                  β”‚     β”‚
β”‚   β”‚   β€’ ExperienceModel      β€’ CertificateModel            β”‚     β”‚
β”‚   β”‚                                                         β”‚     β”‚
β”‚   β”‚   Responsibilities:                                    β”‚     β”‚
β”‚   β”‚   - Data structure definition                          β”‚     β”‚
β”‚   β”‚   - JSON serialization (toMap/fromMap)                 β”‚     β”‚
β”‚   β”‚   - Type validation                                    β”‚     β”‚
β”‚   β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜     β”‚
β”‚                           β”‚                                       β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
                            β”‚
                            ↓
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚                      EXTERNAL DATA SOURCE                           β”‚
β”‚                                                                     β”‚
β”‚                    β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”                          β”‚
β”‚                    β”‚     SUPABASE        β”‚                          β”‚
β”‚                    β”‚                     β”‚                          β”‚
β”‚                    β”‚  β€’ PostgreSQL DB    β”‚                          β”‚
β”‚                    β”‚  β€’ Auth System      β”‚                          β”‚
β”‚                    β”‚  β€’ Real-time Sync   β”‚                          β”‚
β”‚                    β”‚  β€’ Row Level Sec.   β”‚                          β”‚
β”‚                    β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜                          β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

Fluxo de Dados

USER INTERACTION
      ↓
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚   View (Widget)      β”‚  β†’ User taps button, enters text
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
           β”‚
           ↓ Event (onPressed, onChange)
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚   ViewModel          β”‚  β†’ Receives event, updates state
β”‚   (Controller)       β”‚  β†’ Calls repository methods
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
           β”‚
           ↓ Method call
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚   Repository         β”‚  β†’ Handles data operations
β”‚   (Data Layer)       β”‚  β†’ Interacts with Supabase
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
           β”‚
           ↓ HTTP/gRPC
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚   Supabase API       β”‚  β†’ Returns data
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
           β”‚
           ↓ Response
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚   Repository         β”‚  β†’ Converts to Models
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
           β”‚
           ↓ Models
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚   ViewModel          β”‚  β†’ Updates state
β”‚   (Controller)       β”‚  β†’ notifyListeners()
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
           β”‚
           ↓ State change
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚   View (Widget)      β”‚  β†’ Rebuilds with new data
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

PrincΓ­pios Aplicados

βœ… SOLID Principles

  • S - Single Responsibility: Cada classe tem uma responsabilidade ΓΊnica
  • O - Open/Closed: ExtensΓ­vel via interfaces (IPortfolioRepository)
  • L - Liskov Substitution: SupabaseRepository pode ser substituΓ­do por MockRepository
  • I - Interface Segregation: Interfaces especΓ­ficas para cada tipo de repositΓ³rio
  • D - Dependency Inversion: Controllers dependem de abstraΓ§Γ΅es (interfaces)

βœ… Design Patterns

  • Repository Pattern: AbstraΓ§Γ£o da camada de dados
  • MVVM: SeparaΓ§Γ£o entre View e lΓ³gica de negΓ³cio
  • Dependency Injection: Provider para injeΓ§Γ£o de dependΓͺncias
  • Observer Pattern: ChangeNotifier para reatividade
  • Atomic Design: ComponentizaΓ§Γ£o hierΓ‘rquica de UI

BenefΓ­cios da Arquitetura

BenefΓ­cio DescriΓ§Γ£o
πŸ§ͺ Testabilidade FΓ‘cil criar mocks para testes unitΓ‘rios
πŸ”§ Manutenibilidade MudanΓ§as isoladas nΓ£o afetam outras camadas
πŸ“ˆ Escalabilidade FΓ‘cil adicionar novas features sem quebrar cΓ³digo existente
πŸ”„ Reusabilidade Componentes podem ser reutilizados em diferentes contextos
πŸ‘₯ ColaboraΓ§Γ£o Estrutura clara facilita trabalho em equipe
πŸ› Debugging Fluxo de dados previsΓ­vel facilita identificaΓ§Γ£o de bugs

πŸš€ Como Rodar o Projeto

PrΓ©-requisitos

Certifique-se de ter o Flutter SDK instalado.

  1. Clone o repositΓ³rio:

    git clone [https://github.com/DevFullStack-Franklyn-R-Silva/meu_curriculo_flutter.git](https://github.com/DevFullStack-Franklyn-R-Silva/meu_curriculo_flutter.git)
    cd meu_curriculo_flutter
  2. Instale as dependΓͺncias:

    flutter pub get
  3. Rode no Chrome:

    flutter run -d chrome

πŸ“¦ Como Fazer o Deploy (GitHub Pages)

Para gerar a versΓ£o de produΓ§Γ£o e hospedar gratuitamente:

# Gere o build de web (substitua o href pelo nome do seu repositΓ³rio)
flutter build web --release --base-href "/meu_curriculo_flutter/"

# O conteΓΊdo gerado estarΓ‘ na pasta /build/web

πŸ‘¨β€πŸ’» Autor

Franklyn Roberto Mobile Developer (Flutter) & Fullstack


Desenvolvido com πŸ’™ e Flutter.

About

πŸš€ PortfΓ³lio Interativo desenvolvido com Flutter Web. Demonstra Clean Architecture, Provider, FΓ­sica MagnΓ©tica (Gravity), Glassmorphism e Cards 3D HologrΓ‘ficos.

Topics

Resources

Stars

Watchers

Forks

Contributors 2

  •  
  •