finish peddler app translation
This commit is contained in:
parent
42f2da1177
commit
95e0581e40
@ -2,7 +2,7 @@
|
|||||||
title: Peddler App
|
title: Peddler App
|
||||||
description: You hear the ice cream man in his truck, you try to catch him, but the guy is already far away.
|
description: You hear the ice cream man in his truck, you try to catch him, but the guy is already far away.
|
||||||
tags: [Tech, SideProject]
|
tags: [Tech, SideProject]
|
||||||
image: '/blog/peddler-app/banner.png'
|
image: "/blog/peddler-app/banner.png"
|
||||||
imageCaption: Peddler App provisional logo
|
imageCaption: Peddler App provisional logo
|
||||||
date: 2023-12-11
|
date: 2023-12-11
|
||||||
author: Juan Manzanero
|
author: Juan Manzanero
|
||||||
@ -56,7 +56,7 @@ next features:
|
|||||||
- Customers can just create a profile with their name or alias, and set
|
- Customers can just create a profile with their name or alias, and set
|
||||||
locations, for example: house
|
locations, for example: house
|
||||||
- Once a peddler is near, the backend will send a notification to the customer
|
- Once a peddler is near, the backend will send a notification to the customer
|
||||||
- If the customer taps and confirms the notification
|
- The customer taps and confirms the notification
|
||||||
|
|
||||||
Of course, customers would change notifications settings and more, but that's
|
Of course, customers would change notifications settings and more, but that's
|
||||||
the core idea.
|
the core idea.
|
||||||
|
54
src/content/blog/es/peddler-app.mdx
Normal file
54
src/content/blog/es/peddler-app.mdx
Normal file
@ -0,0 +1,54 @@
|
|||||||
|
---
|
||||||
|
title: Peddler App
|
||||||
|
description: Escuchas al heladero en su camioneta, intentas alcanzarlo, pero ya está lejos.
|
||||||
|
tags: [Tech, SideProject]
|
||||||
|
image: /blog/peddler-app/banner.png
|
||||||
|
imageCaption: Logo provisional de Peddler App
|
||||||
|
date: 2023-12-11
|
||||||
|
author: Juan Manzanero
|
||||||
|
rss: true
|
||||||
|
---
|
||||||
|
|
||||||
|
 _Logo provisional de Peddler App_
|
||||||
|
|
||||||
|
## La idea
|
||||||
|
|
||||||
|
Escuchas al heladero en su camioneta, intentas alcanzarlo, pero ya está lejos.
|
||||||
|
|
||||||
|
¿Por qué no recibir una notificación en tu celular cuando el heladero está cerca de ti?, así puedes tocar la
|
||||||
|
notificación y solicitar al heladero que pase en tu ubicación.
|
||||||
|
|
||||||
|
Ese es el propósito de esta app.
|
||||||
|
|
||||||
|
## Abrumador para mi
|
||||||
|
|
||||||
|
Nunca he desarrollado una app grande por mi mismo, pero quiero intentarlo y ver qué ocurre.
|
||||||
|
|
||||||
|
Quiero seguir el camino Indie Hacker, compartiendo en público el progreso, y recibiendo feedback
|
||||||
|
de la comunidad.
|
||||||
|
|
||||||
|
Este post es el primer paso antes de diseñarlo en Figma o incluso crear la landing page, así que
|
||||||
|
quiero escuchar si te interesa, por qué no, o que sería genial para la app.
|
||||||
|
|
||||||
|
## Empezando pequeño
|
||||||
|
|
||||||
|
Realmente quiero empezar pequeño, lanzando un Minimum Viable Product (MVP), con las siguientes funcionalidades:
|
||||||
|
|
||||||
|
- Registro de usuarios y login
|
||||||
|
- Dos tipos de usuarios, "peddlers" (vendedores ambulantes) y clientes
|
||||||
|
- Peddlers
|
||||||
|
- Si el usuario es peddler (quiere vender), redireccionar al formulario de peddlers
|
||||||
|
- Peddlers pueden crear un perfil con el nombre de su empresa y productos que ofrece, por ejemplo helado, dulces, etc
|
||||||
|
- Una vez que el registro es finalizado, peddlers pueden iniciar rutas
|
||||||
|
- La app obtiene la ubicación del peddler, mostrándolo en el mapa
|
||||||
|
- El backend detectará si el peddler entra en el radio de un cliente, y enviará una notificación push al cliente
|
||||||
|
- Una vez que el peddler tiene una solicitud, la app mostrará la ubicación del cliente solicitante en el mapa
|
||||||
|
- El peddler puede ir a la ubicación, y completar la transacción
|
||||||
|
- Clientes
|
||||||
|
- Clientes pueden crear una perfil con su nombre o alias, y registrar ubicaciones, por ejemplo: casa
|
||||||
|
- Una vez que un peddler está cerca, el backend enviará una notificación push al cliente
|
||||||
|
- El cliente toca y confirma la notificación
|
||||||
|
|
||||||
|
Por supuesto, clientes pueden cambiar la configuración de las notificaciones, pero esa es la idea core.
|
||||||
|
|
||||||
|
Para el MVP no quiero implementar pagos dentro de la app, pero desde luego, podría ser un feature futuro.
|
@ -95,7 +95,6 @@ estaría genial lanzar un videojuego pequeño, pero terminado.
|
|||||||
Créeme, es muy, **MUY** difícil desarrollar videojuegos, así que en lugar de abrumarme, mantendré mis
|
Créeme, es muy, **MUY** difícil desarrollar videojuegos, así que en lugar de abrumarme, mantendré mis
|
||||||
**ambiciones simples**, pero **constantes**.
|
**ambiciones simples**, pero **constantes**.
|
||||||
|
|
||||||
|
|
||||||
### ¡Felices fiestas!
|
### ¡Felices fiestas!
|
||||||
|
|
||||||

|

|
||||||
|
@ -7,29 +7,29 @@ import type { CollectionEntry } from "astro:content";
|
|||||||
import { getLangFromUrl } from "@/i18n/utils";
|
import { getLangFromUrl } from "@/i18n/utils";
|
||||||
|
|
||||||
interface Props {
|
interface Props {
|
||||||
post: CollectionEntry<"blog">;
|
post: CollectionEntry<"blog">;
|
||||||
}
|
}
|
||||||
|
|
||||||
export async function getStaticPaths() {
|
export async function getStaticPaths() {
|
||||||
const allBlogPosts = await getCollection(
|
const allBlogPosts = await getCollection(
|
||||||
"blog",
|
"blog",
|
||||||
({ data }) => data.draft !== true,
|
({ data }) => data.draft !== true,
|
||||||
);
|
);
|
||||||
const filterEsPosts = allBlogPosts.map((post) => {
|
const filterEsPosts = allBlogPosts.map((post) => {
|
||||||
const [lang, ...slug] = post.slug.split("/");
|
const [lang, ...slug] = post.slug.split("/");
|
||||||
|
|
||||||
if (lang === "es")
|
if (lang === "es")
|
||||||
return {
|
return {
|
||||||
...post,
|
...post,
|
||||||
slug: slug.toString(),
|
slug: slug.toString(),
|
||||||
};
|
};
|
||||||
else null;
|
else null;
|
||||||
});
|
});
|
||||||
|
|
||||||
return filterEsPosts.map((post) => ({
|
return filterEsPosts.map((post) => ({
|
||||||
params: { slug: post?.slug },
|
params: { slug: post?.slug },
|
||||||
props: { post },
|
props: { post },
|
||||||
}));
|
}));
|
||||||
}
|
}
|
||||||
|
|
||||||
const { post } = Astro.props;
|
const { post } = Astro.props;
|
||||||
@ -39,13 +39,13 @@ const lang = getLangFromUrl(Astro.url);
|
|||||||
---
|
---
|
||||||
|
|
||||||
<Layout title={post.data.title} description={post.data.description}>
|
<Layout title={post.data.title} description={post.data.description}>
|
||||||
<article class="prose prose-invert">
|
<article class="prose prose-invert">
|
||||||
<h1>{post.data.title}</h1>
|
<h1>{post.data.title}</h1>
|
||||||
<Content components={{ ...components }} />
|
<Content components={{ ...components }} />
|
||||||
<hr />
|
<hr />
|
||||||
<p>
|
<p>
|
||||||
<strong>Publicado: </strong>
|
<strong>Publicado: </strong>
|
||||||
{post.data.date && formatDate(new Date(post.data.date), lang)}
|
{post.data.date && formatDate(new Date(post.data.date), lang)}
|
||||||
</p>
|
</p>
|
||||||
</article>
|
</article>
|
||||||
</Layout>
|
</Layout>
|
||||||
|
Loading…
x
Reference in New Issue
Block a user