Momento Fotos

Momento Fotos
|Projeto - artigo - Arquitetura - Desenvolvimento de Software - SaaS

Momento Fotos: como uma experiência pessoal me levou a construir um SaaS com engenharia de software e IA

O projeto começou com uma experiência ruim

A ideia do Momento Fotos não surgiu de uma pesquisa de mercado ou de uma oportunidade identificada em uma planilha. Ela começou com uma experiência pessoal.

Ao selecionar as fotos do meu próprio casamento, encontrei uma plataforma que tornava uma tarefa que deveria ser prazerosa em algo lento, confuso e pouco intuitivo. A navegação não era boa, especialmente considerando a quantidade de imagens, e a forma como os arquivos eram disponibilizados levantou dúvidas sobre a segurança do acesso e a proteção das fotografias originais.

A experiência se repetiu quando fui acessar as fotos do casamento da minha irmã. Novamente, encontrei dificuldades de navegação, lentidão, travamentos e problemas aparentes no controle de acesso, que permitiam visualizar imagens além daquelas relacionadas ao evento que deveria estar disponível para mim.

Conversei com minha mãe e minha irmã, que também tiveram dificuldades para visualizar e baixar as fotografias. Depois, conversei com meu tio, que trabalha como fotógrafo, e com o fotografo do meu casamento, e entendi melhor as necessidades de quem está do outro lado: os profissionais que precisam organizar seus clientes, disponibilizar galerias, receber seleções e entregar os arquivos finais.

Foi quando percebi que havia dois problemas relacionados, mas diferentes.

Para quem contrata o serviço, acessar as fotografias precisa ser simples, rápido e seguro. Para quem fotografa, gerenciar clientes, eventos, arquivos e entregas precisa fazer parte de um fluxo de trabalho organizado, sem gerar retrabalho desnecessário.

Foi assim que nasceu o Momento Fotos, um projeto que começou com uma necessidade pessoal e se tornou um exercício prático de engenharia de software, arquitetura de sistemas, segurança e desenvolvimento de produto.

Mais do que uma galeria de fotografias

O objetivo nunca foi apenas criar mais um site para exibir imagens.

A proposta do Momento Fotos é oferecer uma plataforma para fotógrafos profissionais e estúdios organizarem o relacionamento com seus clientes e disponibilizarem fotografias em uma experiência melhor, tanto para quem administra o acervo quanto para quem acessa as galerias.

Entre as funcionalidades previstas na plataforma estão:

  • Gestão de clientes e eventos: centralização das informações necessárias para organizar o trabalho do fotógrafo.

  • Galerias privadas: acesso às fotografias de cada evento com controles de acesso específicos.

  • Seleção de imagens: possibilidade de visualizar as fotos, marcar favoritas e organizar a seleção pelo celular ou computador.

  • Entrega de arquivos: disponibilização controlada das fotografias em alta resolução.

  • Portfólio público: uma página para o fotógrafo apresentar seu trabalho e facilitar o contato com potenciais clientes.

  • Organização operacional: uma base para ampliar o controle sobre o fluxo de atendimento, seleção e entrega.

A ideia é reduzir a distância entre o trabalho realizado pelo fotógrafo e a experiência de quem recebe as imagens.

E isso exige mais do que uma interface bonita.

Uma galeria pode parecer simples na superfície, mas precisa lidar com arquivos grandes, diferentes resoluções, permissões de acesso, armazenamento, custos de transferência, autenticação, disponibilidade e privacidade.

Esses foram alguns dos problemas que orientaram as decisões técnicas do projeto.

Engenharia por trás da experiência

Tenho experiência profissional com infraestrutura, redes, engenharia de dados e plataformas de processamento distribuído. Ao desenvolver o Momento Fotos, aproveitei esse repertório para pensar a aplicação como um sistema completo, considerando não apenas as telas, mas também as dependências e os riscos de cada camada.

A arquitetura foi organizada em torno de responsabilidades específicas, incluindo interface, lógica de negócio, banco de dados, armazenamento de arquivos, autenticação, integrações e infraestrutura.

1. Experiência do usuário e navegação mobile

Uma das principais motivações do projeto foi melhorar a experiência de quem acessa fotografias pelo celular.

Por isso, a interface foi pensada para facilitar a navegação em galerias, a visualização de imagens e a interação com os recursos de seleção, evitando que o usuário precise lidar com fluxos complicados para realizar tarefas simples.

A aplicação utiliza Next.js com TypeScript, seguindo uma estrutura baseada no App Router. O desenvolvimento também considera recursos de aplicação web progressiva, ou PWA, para oferecer uma experiência adequada a diferentes dispositivos.

O princípio é simples: a complexidade técnica deve ficar nos bastidores. Para o usuário, o acesso às fotografias precisa ser direto e compreensível.

2. Armazenamento e distribuição de imagens

Fotografias em alta resolução ocupam espaço e podem gerar um volume significativo de transferência de dados. Carregar arquivos originais em todas as situações seria uma escolha ruim tanto para o desempenho quanto para o custo operacional.

Para enfrentar esse problema, o projeto considera uma estratégia de armazenamento em camadas, com serviços especializados para diferentes tipos de arquivo.

  • Cloudflare R2: armazenamento de cópias otimizadas para visualização, como miniaturas e prévias.

  • Backblaze B2: armazenamento dos arquivos originais em alta resolução e apoio à estratégia de preservação dos arquivos.

  • Processamento de imagens: geração de versões otimizadas para a navegação, com tecnologias como Sharp e formatos adequados para a web.

  • Downloads controlados: disponibilização dos arquivos originais por fluxos autorizados, com possibilidade de empacotamento em arquivos ZIP.

A separação permite tratar de forma diferente as imagens utilizadas com frequência na navegação e os arquivos originais que precisam ser preservados para a entrega.

Também permite avaliar os custos de armazenamento e transferência de dados de acordo com o uso real da plataforma.

O objetivo é evitar que cada visualização de uma galeria exija a transferência de um arquivo original desnecessariamente grande.

3. Banco de dados e isolamento entre fotógrafos

Uma plataforma utilizada por vários fotógrafos precisa garantir que os dados de um profissional não fiquem disponíveis para outro.

Esse requisito influencia diretamente a modelagem do banco de dados e a implementação das regras de autorização.

O projeto utiliza Supabase com PostgreSQL e uma estrutura multi-tenant, na qual os registros são associados ao contexto de cada fotógrafo ou estúdio.

A estratégia de segurança inclui políticas de Row-Level Security (RLS), responsáveis por restringir o acesso aos registros no próprio banco de dados, além de verificações na camada de aplicação.

A intenção é estabelecer diferentes barreiras de proteção, evitando que a segurança dependa apenas de filtros implementados na interface.

Esse cuidado é especialmente importante para clientes, eventos, galerias e demais recursos que contêm informações privadas.

Uma regra orienta essa parte do projeto: nenhum fotógrafo deve conseguir acessar os dados, as galerias ou os clientes privados de outro profissional sem autorização explícita.

4. Segurança desde a arquitetura

As experiências que deram origem ao projeto deixaram claro que disponibilizar fotografias não significa apenas publicar arquivos em uma página.

É necessário controlar quem pode visualizar cada galeria, quem pode baixar os originais e quais operações cada usuário está autorizado a executar.

Por isso, a arquitetura considera diferentes mecanismos de proteção:

  • Autenticação e gerenciamento de sessões.

  • Verificação de autorização nas operações executadas pelo servidor.

  • Políticas de acesso no banco de dados.

  • Proteção contra falhas de autorização em nível de objeto, conhecidas como BOLA e IDOR.

  • Controle de acesso às galerias privadas.

  • Proteção das rotas responsáveis por downloads e operações sensíveis.

  • Registros de auditoria para acompanhar ações relevantes.

  • Cuidados com o tratamento de credenciais e informações sensíveis.

Um dos pontos mais importantes é distinguir autenticação de autorização.

Saber quem é o usuário não significa que ele pode acessar qualquer recurso da aplicação. Cada operação precisa verificar se aquele usuário tem permissão para acessar o objeto solicitado.

Essa distinção é fundamental em uma plataforma multi-tenant, especialmente quando cada fotógrafo administra um acervo independente.

Também considero a auditoria parte da arquitetura. Registrar operações relevantes ajuda a investigar falhas, compreender comportamentos inesperados e acompanhar mudanças em recursos sensíveis.

Esses mecanismos precisam ser acompanhados de testes e revisões contínuas. A existência de políticas de segurança, por si só, não comprova que todos os caminhos de acesso estejam protegidos.

5. Infraestrutura, integrações e operação

Além do código da aplicação, o projeto considera os serviços necessários para manter o sistema acessível, integrar funcionalidades e organizar o processo de publicação.

Entre as tecnologias e os serviços utilizados ou previstos na arquitetura estão:

  • Next.js e TypeScript: estrutura da aplicação e implementação das regras de negócio.

  • Supabase e PostgreSQL: persistência de dados, autenticação e políticas de acesso.

  • Cloudflare: gerenciamento de DNS, recursos de proteção e distribuição de conteúdo.

  • Cloudflare R2 e Backblaze B2: armazenamento de imagens e arquivos originais.

  • Vercel: hospedagem e publicação da aplicação.

  • Git e automação de deploy: organização do código e do processo de entrega.

  • Serviços de e-mail e pagamentos: integrações relacionadas à comunicação com usuários e à evolução comercial da plataforma.

A arquitetura também considera logs, monitoramento, tratamento de erros e estratégias de preservação dos arquivos.

Backup, nesse contexto, não é simplesmente armazenar uma segunda cópia em algum lugar. É preciso considerar a independência entre cópias, as permissões de acesso, os riscos de exclusão, os custos e a possibilidade de recuperação.

Da mesma forma, redundância de infraestrutura não garante, automaticamente, a recuperação dos dados ou a continuidade do serviço. Esses aspectos dependem de como os componentes foram configurados e de testes que comprovem seu funcionamento.

Esses cuidados fazem parte do planejamento de uma aplicação que pretende lidar com arquivos pessoais importantes para seus usuários.

Vibe-coding com responsabilidade técnica

Um dos aspectos mais interessantes do desenvolvimento foi utilizar IA como parte ativa do processo de engenharia.

O projeto foi construído com uma abordagem conhecida como vibe-coding, mas não limitada à geração de código a partir de instruções em linguagem natural.

Utilizei agentes de IA com responsabilidades específicas, organizando o desenvolvimento em torno de tarefas, requisitos, arquitetura, implementação e revisão.

A proposta foi dividir o trabalho em áreas, permitindo que agentes especializados apoiassem atividades como:

  • Decomposição de funcionalidades em tarefas menores.

  • Implementação de componentes da aplicação.

  • Desenvolvimento e revisão de regras de negócio.

  • Análise de segurança e permissões de acesso.

  • Verificação de consistência entre as mudanças realizadas.

  • Apoio à execução de testes e à identificação de problemas.

O uso de agentes não elimina a necessidade de decisões técnicas. Pelo contrário, torna ainda mais importante definir limites claros, revisar resultados e validar o comportamento produzido.

Uma implementação que parece correta pode conter falhas de autorização, inconsistências no banco de dados ou efeitos colaterais em funcionalidades existentes.

Por isso, o processo incluiu verificações com TypeScript, testes automatizados com Vitest e revisões das alterações realizadas. O projeto acumulou uma suíte com mais de 360 testes executados durante o desenvolvimento, como parte desse esforço de validação.

A quantidade de testes, isoladamente, não comprova a ausência de falhas. A qualidade depende também da cobertura dos cenários, da relevância das verificações e da capacidade de detectar comportamentos incorretos.

O aprendizado mais importante foi entender que a IA pode acelerar a implementação, mas a qualidade do resultado continua dependendo da arquitetura, da clareza dos requisitos e da validação técnica.

Vibe-coding não precisa significar abrir mão da engenharia. É possível usar IA para acelerar o desenvolvimento sem deixar de pensar em segurança, manutenção, consistência e comportamento do sistema.

O que aprendi construindo o Momento Fotos

Desenvolver o Momento Fotos foi uma oportunidade de conectar diferentes áreas da computação em um único produto.

O projeto exigiu pensar simultaneamente na experiência do usuário, no modelo de dados, nas permissões de acesso, no armazenamento de arquivos, nos custos de infraestrutura e na forma como as partes da aplicação se comunicam.

Alguns aprendizados se destacaram:

1. A experiência do usuário começa antes da interface. Uma tela bem desenhada não resolve uma arquitetura lenta ou um fluxo de autorização confuso. A experiência depende do funcionamento do sistema como um todo.

2. Segurança precisa fazer parte das decisões iniciais. Isolamento de dados, autorização e proteção de arquivos não devem ser tratados como ajustes para uma etapa posterior.

3. Infraestrutura e custos influenciam o produto. A maneira como as imagens são armazenadas, processadas e entregues afeta o desempenho, a escalabilidade e a viabilidade financeira da plataforma.

4. IA acelera o trabalho, mas não substitui o julgamento técnico. Agentes podem contribuir para implementar e revisar funcionalidades, mas é necessário avaliar as decisões, testar os resultados e compreender os riscos envolvidos.

5. Projetos reais revelam problemas que não aparecem em exemplos didáticos. Regras de acesso, exclusão de dados, recuperação de arquivos, falhas de integração e comportamento em situações inesperadas precisam ser considerados desde o desenvolvimento.

O que vem pela frente

O Momento Fotos já possui uma base funcional e uma arquitetura sobre a qual pretendo continuar evoluindo o produto.

Ainda existem funcionalidades a desenvolver, fluxos a aprimorar e cenários que precisam de validação contínua. Entre as possibilidades para as próximas etapas estão:

  • Evolução do CRM e do fluxo de atendimento dos fotógrafos.

  • Gestão de contratos e assinaturas digitais.

  • Organização de agenda e compromissos.

  • Recursos de apoio à seleção e à curadoria de fotografias.

  • Aprimoramento dos mecanismos de monitoramento, recuperação e operação.

  • Evolução da experiência de fotógrafos e clientes em diferentes dispositivos.

A prioridade é evoluir o sistema de forma consistente, mantendo a atenção aos problemas que motivaram sua criação.

O objetivo não é adicionar funcionalidades apenas por adicionar, mas construir uma plataforma que faça sentido para quem trabalha com fotografia e para quem deseja receber suas imagens.

Conheça o Momento Fotos na prática

A melhor forma de entender a proposta do projeto é conhecer a plataforma de perto.

Acesse o Momento Fotos, explore a experiência e veja como estou trabalhando para tornar a gestão, a seleção e a entrega de fotografias mais simples, com atenção especial à experiência do usuário, à segurança e à arquitetura do sistema.

Acesse o Momento Fotos

O projeto continua evoluindo, e compartilhar essa construção também faz parte do processo. Em breve, pretendo publicar outros artigos sobre as decisões técnicas, os desafios encontrados e os aprendizados durante o desenvolvimento.

Conclusão

O Momento Fotos nasceu de uma situação cotidiana: tentar selecionar e baixar fotografias de um casamento.

O que começou como uma insatisfação com plataformas existentes se transformou em um projeto que me permitiu explorar, na prática, diferentes dimensões da engenharia de software, desde a experiência do usuário até a arquitetura de infraestrutura e o uso de agentes de inteligência artificial.

Foi também uma oportunidade de aplicar conhecimentos de redes, segurança, bancos de dados, armazenamento, integração e desenvolvimento web em um problema concreto.

Mais do que o produto em si, o projeto representa uma forma de trabalhar: identificar um problema real, compreender suas causas, desenhar uma solução, avaliar os riscos e construir de maneira consciente.

Ainda há muito a evoluir, mas a base construída já permite continuar esse trabalho com uma direção clara.

O Momento Fotos é um projeto pessoal que reúne tecnologia, engenharia e uma motivação bastante simples: tornar melhor uma experiência que deveria ser boa desde o início.


Este artigo apresenta as motivações, as decisões arquiteturais e os aprendizados do desenvolvimento do Momento Fotos. As funcionalidades, integrações e os mecanismos de proteção devem ser avaliados conforme seu estágio de implementação e validação. A evolução do projeto continua.