first commit
This commit is contained in:
commit
b2d54a1cc0
319
README.md
Normal file
319
README.md
Normal file
@ -0,0 +1,319 @@
|
|||||||
|
# BCards - Clone do LinkTree Profissional
|
||||||
|
|
||||||
|
Um clone profissional do LinkTree desenvolvido em ASP.NET Core MVC, focado no mercado brasileiro e espanhol. O projeto oferece URLs hierárquicas organizadas por categoria/ramo de atuação, sistema de pagamentos com Stripe e múltiplos planos com estratégia de pricing psicológico (efeito decoy).
|
||||||
|
|
||||||
|
## 🚀 Características Principais
|
||||||
|
|
||||||
|
### ✨ Funcionalidades
|
||||||
|
- **URLs Hierárquicas**: Organização por categoria (ex: `vcart.me/corretor/jose-silva`)
|
||||||
|
- **Sistema de Pagamentos**: Integração completa com Stripe
|
||||||
|
- **3 Planos com Efeito Decoy**: Estratégia psicológica de pricing
|
||||||
|
- **Autenticação OAuth**: Google e Microsoft
|
||||||
|
- **Temas Dinâmicos**: Sistema de temas com CSS personalizado
|
||||||
|
- **Analytics Avançado**: Rastreamento de visualizações e cliques
|
||||||
|
- **SEO Otimizado**: Meta tags dinâmicas e Schema.org
|
||||||
|
- **Internacionalização**: Português e Espanhol
|
||||||
|
- **Renderização SSR**: SEO-friendly
|
||||||
|
|
||||||
|
### 🎯 Planos e Pricing (Estratégia Decoy)
|
||||||
|
- **Básico** (R$ 9,90/mês): 5 links, temas básicos, analytics simples
|
||||||
|
- **Profissional** (R$ 24,90/mês): 15 links, todos os temas, analytics avançado, domínio personalizado *(DECOY)*
|
||||||
|
- **Premium** (R$ 29,90/mês): Links ilimitados, temas customizáveis, analytics completo, múltiplos domínios
|
||||||
|
|
||||||
|
## 🛠️ Tecnologias
|
||||||
|
|
||||||
|
- **Backend**: ASP.NET Core MVC (.NET 8)
|
||||||
|
- **Banco de Dados**: MongoDB com MongoDB.Driver
|
||||||
|
- **Pagamentos**: Stripe.NET
|
||||||
|
- **Autenticação**: OAuth 2.0 (Google, Microsoft)
|
||||||
|
- **Frontend**: Bootstrap 5, CSS customizado, JavaScript vanilla
|
||||||
|
- **Cache**: Response Caching e Memory Cache
|
||||||
|
- **SEO**: Server-side rendering, meta tags dinâmicas
|
||||||
|
|
||||||
|
## 📁 Estrutura do Projeto
|
||||||
|
|
||||||
|
```
|
||||||
|
BCards/
|
||||||
|
├── src/BCards.Web/
|
||||||
|
│ ├── Controllers/ # Controllers MVC
|
||||||
|
│ ├── Models/ # Modelos de dados
|
||||||
|
│ ├── Services/ # Lógica de negócio
|
||||||
|
│ ├── Repositories/ # Acesso a dados
|
||||||
|
│ ├── Views/ # Views Razor
|
||||||
|
│ ├── Configuration/ # Configurações
|
||||||
|
│ ├── Middleware/ # Middleware customizado
|
||||||
|
│ ├── Resources/ # Recursos de localização
|
||||||
|
│ └── wwwroot/ # Arquivos estáticos
|
||||||
|
└── tests/BCards.Tests/ # Testes unitários
|
||||||
|
```
|
||||||
|
|
||||||
|
## ⚙️ Configuração
|
||||||
|
|
||||||
|
### 1. Pré-requisitos
|
||||||
|
- .NET 8 SDK
|
||||||
|
- MongoDB 4.4+
|
||||||
|
- Conta Stripe (para pagamentos)
|
||||||
|
- Credenciais OAuth (Google/Microsoft)
|
||||||
|
|
||||||
|
### 2. Configuração do MongoDB
|
||||||
|
```bash
|
||||||
|
# Instalar MongoDB localmente ou usar MongoDB Atlas
|
||||||
|
# String de conexão padrão: mongodb://localhost:27017
|
||||||
|
```
|
||||||
|
|
||||||
|
### 3. Configuração das Variáveis de Ambiente
|
||||||
|
|
||||||
|
Edite `appsettings.json` ou `appsettings.Development.json`:
|
||||||
|
|
||||||
|
```json
|
||||||
|
{
|
||||||
|
"MongoDb": {
|
||||||
|
"ConnectionString": "mongodb://localhost:27017",
|
||||||
|
"DatabaseName": "BCardsDB"
|
||||||
|
},
|
||||||
|
"Stripe": {
|
||||||
|
"PublishableKey": "pk_test_seu_publishable_key",
|
||||||
|
"SecretKey": "sk_test_seu_secret_key",
|
||||||
|
"WebhookSecret": "whsec_seu_webhook_secret"
|
||||||
|
},
|
||||||
|
"Authentication": {
|
||||||
|
"Google": {
|
||||||
|
"ClientId": "seu_google_client_id",
|
||||||
|
"ClientSecret": "seu_google_client_secret"
|
||||||
|
},
|
||||||
|
"Microsoft": {
|
||||||
|
"ClientId": "seu_microsoft_client_id",
|
||||||
|
"ClientSecret": "seu_microsoft_client_secret"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"BaseUrl": "https://vcart.me"
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
### 4. Configuração do Stripe
|
||||||
|
|
||||||
|
1. Crie uma conta no [Stripe](https://stripe.com)
|
||||||
|
2. Configure os produtos e preços:
|
||||||
|
- Básico: R$ 9,90/mês
|
||||||
|
- Profissional: R$ 24,90/mês
|
||||||
|
- Premium: R$ 29,90/mês
|
||||||
|
3. Configure webhooks para: `/webhook/stripe`
|
||||||
|
4. Eventos necessários:
|
||||||
|
- `checkout.session.completed`
|
||||||
|
- `invoice.payment_succeeded`
|
||||||
|
- `customer.subscription.updated`
|
||||||
|
- `customer.subscription.deleted`
|
||||||
|
|
||||||
|
### 5. Configuração OAuth
|
||||||
|
|
||||||
|
#### Google OAuth
|
||||||
|
1. Acesse [Google Cloud Console](https://console.cloud.google.com)
|
||||||
|
2. Crie um projeto ou selecione existente
|
||||||
|
3. Ative a API Google+
|
||||||
|
4. Configure URLs de redirecionamento:
|
||||||
|
- `https://seudominio.com/auth/googlecallback`
|
||||||
|
|
||||||
|
#### Microsoft OAuth
|
||||||
|
1. Acesse [Azure Portal](https://portal.azure.com)
|
||||||
|
2. Registre uma aplicação
|
||||||
|
3. Configure URLs de redirecionamento:
|
||||||
|
- `https://seudominio.com/auth/microsoftcallback`
|
||||||
|
|
||||||
|
## 🚀 Instalação e Execução
|
||||||
|
|
||||||
|
### 1. Clone o repositório
|
||||||
|
```bash
|
||||||
|
git clone https://github.com/seuusuario/bcards.git
|
||||||
|
cd bcards
|
||||||
|
```
|
||||||
|
|
||||||
|
### 2. Restaurar dependências
|
||||||
|
```bash
|
||||||
|
dotnet restore
|
||||||
|
```
|
||||||
|
|
||||||
|
### 3. Executar a aplicação
|
||||||
|
```bash
|
||||||
|
cd src/BCards.Web
|
||||||
|
dotnet run
|
||||||
|
```
|
||||||
|
|
||||||
|
### 4. Acessar a aplicação
|
||||||
|
- URL local: `https://localhost:7001`
|
||||||
|
- Swagger: `https://localhost:7001/swagger` (desenvolvimento)
|
||||||
|
|
||||||
|
## 🗄️ Modelos de Dados
|
||||||
|
|
||||||
|
### User
|
||||||
|
```csharp
|
||||||
|
- Id: string
|
||||||
|
- Email: string
|
||||||
|
- Name: string
|
||||||
|
- ProfileImage: string
|
||||||
|
- AuthProvider: string
|
||||||
|
- StripeCustomerId: string
|
||||||
|
- SubscriptionStatus: string
|
||||||
|
- CurrentPlan: string
|
||||||
|
```
|
||||||
|
|
||||||
|
### UserPage
|
||||||
|
```csharp
|
||||||
|
- Id: string
|
||||||
|
- UserId: string
|
||||||
|
- Slug: string
|
||||||
|
- Category: string
|
||||||
|
- BusinessType: string (individual/company)
|
||||||
|
- DisplayName: string
|
||||||
|
- Bio: string
|
||||||
|
- ProfileImage: string
|
||||||
|
- Theme: PageTheme
|
||||||
|
- Links: List<LinkItem>
|
||||||
|
- SeoSettings: SeoSettings
|
||||||
|
- Analytics: PageAnalytics
|
||||||
|
- PlanLimitations: PlanLimitations
|
||||||
|
```
|
||||||
|
|
||||||
|
### LinkItem
|
||||||
|
```csharp
|
||||||
|
- Title: string
|
||||||
|
- Url: string
|
||||||
|
- Description: string
|
||||||
|
- Icon: string
|
||||||
|
- IsActive: bool
|
||||||
|
- Order: int
|
||||||
|
- Clicks: int
|
||||||
|
```
|
||||||
|
|
||||||
|
## 🎨 Sistema de Temas
|
||||||
|
|
||||||
|
O sistema suporta temas dinâmicos com CSS gerado automaticamente:
|
||||||
|
|
||||||
|
```csharp
|
||||||
|
var theme = new PageTheme
|
||||||
|
{
|
||||||
|
Name = "Tema Personalizado",
|
||||||
|
PrimaryColor = "#007bff",
|
||||||
|
SecondaryColor = "#0056b3",
|
||||||
|
BackgroundColor = "#ffffff",
|
||||||
|
TextColor = "#212529",
|
||||||
|
BackgroundImage = "/images/bg.jpg"
|
||||||
|
};
|
||||||
|
```
|
||||||
|
|
||||||
|
## 📊 Analytics
|
||||||
|
|
||||||
|
Sistema de analytics integrado que rastreia:
|
||||||
|
- Visualizações de página
|
||||||
|
- Cliques em links
|
||||||
|
- Estatísticas por dispositivo
|
||||||
|
- Top referenciadores
|
||||||
|
- Dados geográficos (básico)
|
||||||
|
|
||||||
|
## 🔒 Segurança
|
||||||
|
|
||||||
|
- Autenticação OAuth segura
|
||||||
|
- Validação de entrada em todos os endpoints
|
||||||
|
- Rate limiting (recomendado implementar)
|
||||||
|
- Headers de segurança
|
||||||
|
- Validação de webhooks Stripe
|
||||||
|
- Sanitização de URLs
|
||||||
|
|
||||||
|
## 🌐 SEO
|
||||||
|
|
||||||
|
### Características SEO
|
||||||
|
- **Meta tags dinâmicas** por categoria de negócio
|
||||||
|
- **Open Graph** completo para redes sociais
|
||||||
|
- **Schema.org markup** específico por tipo
|
||||||
|
- **URLs canônicas** hierárquicas
|
||||||
|
- **Sitemap.xml** automático
|
||||||
|
- **Server-side rendering** completo
|
||||||
|
|
||||||
|
### Exemplo de Meta Tags Geradas
|
||||||
|
```html
|
||||||
|
<title>José Silva - Profissional de Corretor de Imóveis | BCards</title>
|
||||||
|
<meta name="description" content="Conheça José Silva, profissional especializado em corretor de imóveis. Acesse os links e entre em contato.">
|
||||||
|
<meta name="keywords" content="josé silva, corretor de imóveis, profissional, corretor, imóveis, casa, apartamento, venda, locação">
|
||||||
|
```
|
||||||
|
|
||||||
|
## 🚀 Deploy
|
||||||
|
|
||||||
|
### Opções de Deploy
|
||||||
|
1. **Azure App Service** (recomendado)
|
||||||
|
2. **IIS** (Windows Server)
|
||||||
|
3. **Docker** (containerização)
|
||||||
|
4. **Linux** (Nginx + Kestrel)
|
||||||
|
|
||||||
|
### Configurações de Produção
|
||||||
|
```json
|
||||||
|
{
|
||||||
|
"MongoDb": {
|
||||||
|
"ConnectionString": "mongodb+srv://user:pass@cluster.mongodb.net/bcards?retryWrites=true&w=majority"
|
||||||
|
},
|
||||||
|
"Stripe": {
|
||||||
|
"PublishableKey": "pk_live_seu_publishable_key",
|
||||||
|
"SecretKey": "sk_live_seu_secret_key",
|
||||||
|
"WebhookSecret": "whsec_seu_webhook_secret_producao"
|
||||||
|
},
|
||||||
|
"BaseUrl": "https://vcart.me"
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
## 🧪 Testes
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Executar todos os testes
|
||||||
|
dotnet test
|
||||||
|
|
||||||
|
# Executar com cobertura
|
||||||
|
dotnet test --collect:"XPlat Code Coverage"
|
||||||
|
```
|
||||||
|
|
||||||
|
## 📈 Melhorias Futuras
|
||||||
|
|
||||||
|
### Funcionalidades Planejadas
|
||||||
|
- [ ] PWA (Progressive Web App)
|
||||||
|
- [ ] API REST completa
|
||||||
|
- [ ] Integração com Google Analytics
|
||||||
|
- [ ] Sistema de templates customizáveis
|
||||||
|
- [ ] Chat de suporte integrado
|
||||||
|
- [ ] Integração com CRM
|
||||||
|
- [ ] Backup automático
|
||||||
|
- [ ] Relatórios avançados em PDF
|
||||||
|
|
||||||
|
### Otimizações Técnicas
|
||||||
|
- [ ] Redis para cache distribuído
|
||||||
|
- [ ] CDN para assets estáticos
|
||||||
|
- [ ] Rate limiting com Redis
|
||||||
|
- [ ] Monitoring com Application Insights
|
||||||
|
- [ ] Health checks
|
||||||
|
- [ ] Logging estruturado com Serilog
|
||||||
|
|
||||||
|
## 🤝 Contribuindo
|
||||||
|
|
||||||
|
1. Fork o projeto
|
||||||
|
2. Crie uma branch para sua feature (`git checkout -b feature/AmazingFeature`)
|
||||||
|
3. Commit suas mudanças (`git commit -m 'Add some AmazingFeature'`)
|
||||||
|
4. Push para a branch (`git push origin feature/AmazingFeature`)
|
||||||
|
5. Abra um Pull Request
|
||||||
|
|
||||||
|
## 📝 Licença
|
||||||
|
|
||||||
|
Este projeto está sob a licença MIT. Veja o arquivo [LICENSE](LICENSE) para detalhes.
|
||||||
|
|
||||||
|
## 🆘 Suporte
|
||||||
|
|
||||||
|
Para suporte técnico, entre em contato:
|
||||||
|
- Email: suporte@vcart.me
|
||||||
|
- Discord: [Servidor da Comunidade]
|
||||||
|
- Issues: [GitHub Issues](https://github.com/seuusuario/bcards/issues)
|
||||||
|
|
||||||
|
## 📞 Contato
|
||||||
|
|
||||||
|
- **Website**: https://vcart.me
|
||||||
|
- **Email**: contato@vcart.me
|
||||||
|
- **LinkedIn**: [Seu LinkedIn]
|
||||||
|
- **Twitter**: [@vcartme]
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
**Desenvolvido com ❤️ para profissionais brasileiros e hispânicos**
|
||||||
Loading…
Reference in New Issue
Block a user