Desarrollo de apps y software profesional

Se escribe aquí. Se entrega ahí. Corre en nuestra máquina.

Somos un estudio de desarrollo: apps nativas para iPhone, iPad y Mac, backend, API y web, escritas por nosotros y alojadas en nuestra propia infraestructura de servidores dedicados en Europa. Nada subcontratado, nada en un revendedor.

RitmoPriorityBadge.swift
// esto es lo que produce ese fragmento → P1

Lo que hacemos

Tres disciplinas, sin lista de treinta tecnologías.

01

Apps para iPhone, iPad y Mac

SwiftUI, hecho para cada plataforma. No una web empaquetada dentro de un contenedor: una app de Mac de verdad, con barra lateral, atajos de teclado y widgets.

02

Backend y API

Laravel, colas en segundo plano, WebSockets en tiempo real y notificaciones push. Lo que hace que una app deje de ser una isla y empiece a sincronizar.

03

Web

Landings, paneles de administración y tiendas online, con el mismo cuidado por el detalle que una app nativa.

QuickAddParser.swift
    public func parse(_ input: String, now: Date = Date()) -> QuickAddResult {
        var remaining = input.trimmingCharacters(in: .whitespacesAndNewlines)
        guard !remaining.isEmpty else { return QuickAddResult(title: "") }

        // Los tokens se extraen antes que la prioridad. Al revés, `p1` casaba dentro de
        // `+p1` y dejaba un proyecto llamado "" o un teléfono `+34` convertido en proyecto.
        let labels = extractTokens(prefix: "@", from: &remaining) + extractTokens(prefix: "#", from: &remaining)
        let project = extractTokens(prefix: "+", from: &remaining).first
        let priority = extractPriority(from: &remaining)
        let recurrence = extractRecurrence(from: &remaining)
        let due = extractDate(from: &remaining, now: now)

        let rawTitle = remaining
            .replacingOccurrences(of: "  ", with: " ")
            .trimmingCharacters(in: .whitespacesAndNewlines)
        let title = Self.clampTitle(rawTitle)
SendTaskReminderPush.php
namespace App\Jobs;

use App\Contracts\ApnsClient;
use App\Models\Task;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Foundation\Queue\Queueable;

/**
 * Recordatorio visible de una tarea próxima a vencer (doc 04 §7). Se dispara desde
 * App\Console\Commands\DispatchTaskReminderPushes.
 */
class SendTaskReminderPush implements ShouldQueue
{
    use Queueable;

    public function __construct(public readonly Task $task) {}

    public function handle(ApnsClient $apns): void
    {
        $owner = $this->task->workspace->user;

        foreach ($owner->devices()->where('is_active', true)->get() as $device) {
            $result = $apns->send($device->apns_token, [
                'aps' => [
                    'alert' => [
                        'title' => $this->task->title,
                        'body' => 'Vence pronto',
                    ],
                    'sound' => 'default',
                ],
                'task_id' => $this->task->id,
            ], 'alert');

            if ($result->tokenInvalid) {
                $device->update(['is_active' => false]);
            }
        }
    }
}

01 — RitmoKit, Swift

Se escribe aquí.

«Revisar el contrato mañana p1» se analiza en el propio dispositivo, en los trece idiomas de la app, antes de guardar nada. Es un fragmento real de RitmoKit, la capa que comparten las apps de iPhone, iPad y Mac de Ritmo To-Do.

02 — Laravel, PHP

Se entrega ahí.

Cuando una tarea está a punto de vencer, un job del backend en Laravel manda el aviso al iPhone. Es código real, en producción, del propio backend de Ritmo —no un ejemplo de manual.

Lo que hemos entregado

Ritmo To-Do, de punta a punta.

Una app de tareas para iPhone, iPad y Mac, con backend propio, sincronización en tiempo real y trece idiomas. El mismo estudio que la escribió es el que la aloja.

Ritmo To-Do en un Studio Display: barra lateral con los proyectos y el panel de inicio con sus tarjetas.
Un proyecto de Ritmo To-Do en vista de lista, con sus tareas y sus fechas.
El cronograma de un proyecto de Ritmo To-Do en un iPad, con barras por sección y flechas de dependencia.

Próximamente en la App Store

Tres vistas del mismo proyecto: lista, tablero y cronograma.

Dependencias entre tareas, avisos cuando una fecha se vuelve imposible, proyectos compartidos y un analizador de lenguaje natural que entiende trece idiomas. Sin cuenta, nada sale del iPhone.

Ver Ritmo To-Do →

Dónde corre

La infraestructura no es un proveedor. Es nuestra.

2 años, 40 semanas y 5 días

sin reiniciar — medido en raptor, uno de nuestros servidores, el 10-09-2026

No es una promesa de marketing ni un SLA que haya que respaldar con nada: es un dato comprobable. En casi tres años no ha habido una sola caída que obligara a reiniciar la máquina. Es uno de los ocho servidores dedicados que tenemos en centros de datos europeos.

raptor, medido el 10-09-2026

ProcesadorIntel Xeon E3-1270 v6 · 3,80 GHz · 8 hilos
Memoria31 GB
Disco356 GB · XFS
SistemaAlmaLinux 8.10
PanelPlesk
ProveedorOVH

Trabajo entregado y en producción ahí mismo:

brobit.com brobit.cloud api.ritmo.brobit.cloud ritmotodo.app monkeyfactory.tech eterniafactory.com globaljobsltd.co.uk y varias tiendas online
Ocho servidores dedicados en centros de datos europeos 8 servidores dedicados · centros de datos en Europa
Diagrama propio, no una foto de banco de imágenes.

Hablemos

Cuéntanos qué quieres construir.

Un correo basta para empezar. Contesta el propio equipo que escribe el código, no un comercial.

O escribe directamente a info@brobit.cloud.