Cómo construí mi MVP de SaaS con Fauna ($150 en ingresos hasta ahora)

¿Es usted un codificador principiante que intenta implementar el lanzamiento de su MVP? Acabo de terminar mi MVP de ReviewBolt.com , una herramienta de análisis de la competencia. Y está construido usando React + Fauna + Next JS. Es mi primera herramienta SaaS paga, por lo que ganar $150 es un gran logro para mí.
En esta publicación verás por qué elegí Fauna para ReviewBolt y cómo puedes implementar una configuración similar. Te mostraré por qué elegí Fauna como mi base de datos principal. Almacena fácilmente grandes cantidades de datos y me los envía rápidamente. Al final de este artículo, podrás decidir si también deseas crear tu propio sitio web sin servidor con Fauna como back-end.
¿Qué es ReviewBolt?
El sitio web le permite buscar en cualquier sitio web y obtener una revisión detallada de las estrategias publicitarias, la tecnología y las experiencias de los usuarios de una empresa.
Actualmente, Reviewbolt extrae datos de siete fuentes diferentes para brindarle un análisis de cualquier sitio web del mundo. Estimará el gasto en Facebook, el gasto en Google, los ingresos anuales, las métricas de crecimiento del tráfico, las reseñas de los usuarios y más.
¿Por qué lo construí?
He incursionado en el emprendimiento y siempre estoy buscando nuevas oportunidades. Pensé que crear ReviewBolt me ayudaría (1) a determinar el tamaño de una empresa… y (2) a determinar su canal de distribución principal. Esto es muy importante porque si no puedes conseguir nuevos usuarios entonces tu negocio está prácticamente muerto.
Algunas otras cositas interesantes al respecto:
- Obtiene una gran visión general de todo lo que sucede en un sitio web.
- Es más, cada búsqueda que realiza en el sitio web crea una página que se guarda e indexa. Por lo tanto, ReviewBolt crece un poquito con cada búsqueda de un usuario.
Hasta ahora, ha ganado $150, 50 usuarios, analizó más de 3000 sitios web y ayudó a más de 5000 personas con su investigación. Así que es un buen comienzo para un hacker independiente desarrollador en solitario como yo.
Apareció en Betalist y es bastante popular en los círculos empresariales. Puedes ver mis estadísticas en tiempo real aquí: reviewbolt.com/stats
No soy codificador… todo autodidacta
¡Construirlo hasta ahora no fue tarea fácil! Originalmente me gradué con especialización en inglés en la Universidad McGill en Canadá sin conocimientos tecnológicos. De hecho, tomé una clase de programación en mi último año y obtuve un 50%… la calificación aprobatoria más baja posible.
Pero desde entonces hasta ahora muchas cosas han cambiado. Durante los últimos dos años he estado aprendiendo desarrollo web y de aplicaciones. Este año mi objetivo era crear una empresa SaaS rentable, pero también crear algo que me resultara útil.
Construí ReviewBolt en la pequeña oficina de mi casa en Londres durante este bloqueo masivo. El proyecto funciona y ese es un paso para mí en mi viaje. Y afortunadamente elegí Fauna porque era bastante fácil conseguir una base de datos rápida, confiable y que realmente funcionara con costos muy bajos.
¿Por qué elegí Fauna?
Fauna proporciona un excelente nivel gratuito y, como proyecto de desarrollo en solitario, quería mantener mis costos bajos para ver primero si esto realmente funcionaría.
Advertencia: no soy un experto en fauna. De hecho, todavía me queda un largo camino por recorrer para dominarlo. Sin embargo, esta fue mi configuración para crear el MVP de ReviewBolt.com que ves hoy. Cometí algunos errores realmente tontos, como almacenar mis objetos de datos como cadenas en lugar de objetos… Pero se vive y se aprende.
No comencé con Fauna…
ReviewBolt comenzó como una sola hoja de Google de gran tamaño. Cada vez que alguien hacía una búsqueda en un sitio web, extraía los datos de las distintas fuentes y los guardaba como una fila en una hoja de Google.
Bastante simple ¿verdad? Pero había un problema…
Después de unas 1.000 búsquedas, Google Sheets empezó a estropearse como un coche viejo en un viaje por carretera…. Apenas pude iniciar cuando cargué la página. Así que rápidamente busqué algo más estable.
Entonces encontré Fauna ?
Descubrí que Fauna era realmente rápida y bastante confiable. Comencé a usar su función GraphQL pero me di cuenta de que el lenguaje nativo FQL tenía una documentación mucho mejor.
Hay un excelente panel que le brinda información inmediata sobre su uso.
Utilizo Fauna principalmente de las siguientes maneras:
- Almacenamiento de 110.000 biografías de empresas que eliminé.
- Almacenamiento de datos de Google Ads
- Almacenamiento de datos de anuncios de Facebook
- Almacenamiento de datos de Google Trends
- Almacenamiento de pila de tecnología
- Almacenamiento de opiniones de usuarios
Las 110.000 empresas se almacenan en una colección y los datos en vivo sobre los sitios web se almacenan en otra. Probablemente podría haber creado bases de datos relacionales dentro de la fauna, pero eso me superaba en ese momento y era más fácil almacenar todo como un objeto muy grande.
Para realizar pruebas, Fauna proporciona el shell web integrado. Esto es realmente útil porque puedo seguir los tutoriales y probarlos en tiempo real en el sitio web sin cargar Visual Studio.
¿Qué marcos utiliza el sitio web?
El sitio web funciona con React y NextJS. Para cargar una reseña de un sitio web, simplemente escriba el sitio.
Cada búsqueda se ve así:reviewbolt.com/r/[website.com]
Lo primero que sucede en el backend es que utiliza un Índice de Fauna para ver si esta búsqueda ya se ha realizado. Fauna es muy eficiente para buscar en su base de datos. Incluso con una colección de documentos de 110.000, todavía funciona muy bien gracias al uso de indexación. Entonces, cuando se carga una página, digamos reviewbolt.com/r/fauna
, primero verifica si hay una coincidencia. Si se encuentra una coincidencia, carga los datos guardados y los muestra en la página.
Si no hay ninguna coincidencia, la página muestra una rueda giratoria y en el backend consulta todas estas API públicas sobre el sitio web solicitado. Tan pronto como termina, carga los datos para el usuario.
Y cuando se analiza ese nuevo sitio web, guarda estos datos en mi Colección de Fauna. Entonces el siguiente usuario no tendrá que cargar todo, sino que podremos usar Fauna para buscarlo.
Mi caso de uso es indexar todas las búsquedas en el sitio web de ReviewBolt y luego poder recuperar esas búsquedas fácilmente.
¿Qué más puede hacer Fauna?
El siguiente paso es crear una sección de gráficos. Hasta ahora he creado una versión muy básica de esto sólo para las 90 tiendas principales de Shopify.
Pero lo ideal es que tenga uno que funcione por categoría utilizando el enlace de índice de Fauna para crear múltiples índices alrededor de: Principales gastadores de Facebook, Principales gastadores de Google, Principales tráfico, Principales ingresos, Principales CRM por tráfico. Y será realmente interesante ver quién está en la cima en la investigación de la competencia. Porque en marketing siempre quieres inspirarte en los ganadores.
Pero lo ideal es que tenga uno que funcione por categoría utilizando el enlace de índice de Fauna para crear múltiples índices alrededor de: Principales gastadores de Facebook, Principales gastadores de Google, Principales tráfico, Principales ingresos, Principales CRM por tráfico. Y será realmente interesante ver quién está en la cima en la investigación de la competencia. Porque en marketing siempre quieres inspirarte en los ganadores.
export async function findByName(name){ var data = await client.query(Map( Paginate( Match(Index("rbCompByName"), name) ), Lambda( "person", Get(Var("person")) ) )) return data.data//[0].data}
Esto solicita a Fauna que pagina los resultados y devuelva el objeto encontrado.
Ejecuto esta función cuando busco el nombre del sitio web. Y luego para crear una empresa utilizo este código:
export async function createCompany(slug,linkinfo,trending,googleData,trustpilotReviews,facebookData,tech,date,trafficGrowth,growthLevels,trafficLevel,faunaData){ var Slug = slug var Author = linkinfo var Trends = trending var Google = googleData var Reviews = trustpilotReviews var Facebook = facebookData var TechData = tech var myDate = date var myTrafficGrowth = trafficGrowth var myGrowthLevels = growthLevels var myFaunaData = faunaData client.query( Create(Collection('RBcompanies'), { data: { "Slug": Slug, "Author": Author, "Trends": Trends, "Google": Google, "Reviews": Reviews, "Facebook": Facebook, "TechData": TechData, "Date": myDate, "TrafficGrowth":myTrafficGrowth, "GrowthLevels":myGrowthLevels, "TrafficLevels":trafficLevel, "faunaData":JSON.parse(myFaunaData), } }) ).then(result=console.log(result)).catch(error = console.error('Error mate: ', error.message));}
Lo cual es un poco más largo porque extraigo mucha información sobre varios aspectos del sitio web y la almaceno como un objeto grande.
El lenguaje Fauna FQL es bastante simple una vez que lo entiendes. Sobre todo porque para lo que estoy haciendo al menos no necesito muchos comandos.
Seguí este tutorial sobre cómo crear un clon de Twitter y eso realmente me ayudó.
Esto cambiará cuando introduzca gráficos y ordene una variedad de índices, pero afortunadamente es bastante fácil hacer esto en Fauna.
¿Cuál es el siguiente paso para conocer más sobre Fauna?
Recomiendo encarecidamente ver el vídeo de arriba y también seguir el tutorial en fireship.io . Es genial para repasar los conceptos básicos. Realmente me ayudó a familiarizarme con el lenguaje de consulta sobre fauna.
Conclusión
Fauna fue bastante fácil de implementar como un sistema CRUD básico donde no tenía que preocuparme por las tarifas. El nivel gratuito es actualmente de 100.000 lecturas y 50.000 escrituras y, para el nivel de tráfico que está obteniendo ReviewBolt, funciona. Así que estoy bastante contento con él hasta ahora y lo recomendaría para proyectos futuros.
Deja un comentario