Dialogoi Web is the public reading and discovery interface for conversations generated by a transcript model. The broader Dialogoi project is meant to take informal audio conversations, transcribe them, separate speakers through diarization, anonymize the participants, create summaries and tags, and expose the resulting dialogues in a readable public interface.
The product idea comes from the wish to preserve informal discussions between friends - the kind of conversations about philosophy, technology, life, and personal perspective that can stay useful long after they happen - while protecting the people who took part in them. This repository implements the web surface for those generated conversations. It does not contain the transcript model, a backend, a database, or a production publishing pipeline yet.
This project is frozen for now. The current codebase should be understood as a paused web interface for the intended transcript-model output format, not as an actively developed end-to-end transcription product.
The interface remains useful as a reference for how generated conversations should be presented: searchable cards, readable summaries, speaker-separated messages, tags, and anonymized participants. Future work can resume from this shape when the transcript model or publishing pipeline is ready.
Dialogoi is a space for exposing conversations generated by a transcript model as publishable anonymous dialogues.
The core product promise is simple:
- the ideas are real;
- the names are fictitious;
- the transcript model turns audio into structured dialogue content;
- the published conversation should be useful to readers;
- participant identity should stay protected;
- the final result should feel like a readable dialogue, not a raw transcript dump.
The About page in app/sobre/page.tsx is the current product source of truth. It describes Dialogoi as a way to share productive conversations without attaching identities to opinions that could be misunderstood outside their original context. The web app is the publication surface for the generated conversations, while the transcript model is the intended upstream producer.
Dialogoi starts from a practical tension: some of the most valuable ideas come from casual, honest conversations, but publishing those conversations directly can expose people in ways they did not agree to.
The project exists to make those discussions readable and shareable while reducing that exposure. In the intended product experience, the reader should focus on the ideas, arguments, and reflections rather than the real identities behind them.
The name Dialogoi references the Greek tradition of dialogues, especially the idea that conversations can shape thought when they are preserved and made available to others.
The current About page describes an intended open source AI transcript model that would transform private conversations into publishable dialogues. This model is central to the product mission: Dialogoi Web exists to expose the conversations generated by that process.
flowchart LR
A["Informal audio conversation"] --> B["Transcription"]
B --> C["Speaker diarization"]
C --> D["Anonymization"]
D --> E["Summary generation"]
E --> F["Tag generation"]
F --> G["Generated publishable dialogue"]
G --> H["Dialogoi Web reading interface"]
Based on the product copy, the intended model responsibilities are:
- transcribe the complete conversation from audio;
- identify and separate each speaker through diarization;
- anonymize the participants;
- create a structured summary of the dialogue;
- generate relevant tags for organization and discovery;
- let other people use or adapt the model for their own conversations.
That transcript model is not implemented in this web repository. The About page currently links to https://github.com/seu-usuario/dialogoi-model, which appears to be a placeholder URL for the future model repository.
This repository implements the current Dialogoi web app: the interface that would publish, browse, and read generated conversations after the transcript model has produced them.
- a home page with the Dialogoi brand and archive list;
- client-side search, tag filtering, and sorting;
- cards for dialogue previews;
- dynamic dialogue detail pages;
- summary and participant blocks;
- ordered message rendering with speaker colors;
- an About page explaining the project motivation and future model direction.
The web app currently starts from local dialogue objects in lib/data.ts. Those objects stand in for the generated conversation records that the transcript model or content pipeline would eventually produce.
| Route | File | Responsibility |
|---|---|---|
/ |
app/page.tsx |
Renders the main Dialogoi surface with the header and dialogue discovery UI. |
/dialogo/[id] |
app/dialogo/[id]/page.tsx |
Renders one dialogue from the local dataset, including date, tags, summary, participants, and ordered messages. |
/sobre |
app/sobre/page.tsx |
Explains the project origin, anonymity motivation, intended AI workflow, and model direction. |
| Area | Implementation |
|---|---|
| Framework | Next.js 16 App Router |
| UI runtime | React 19 |
| Language | TypeScript |
| Styling | Tailwind CSS v4 with theme tokens in app/globals.css |
| UI primitives | shadcn-style components in components/ui/*, configured by components.json |
| Lower-level UI utilities | Base UI through @base-ui/react |
| Icons | lucide-react |
| Analytics | @vercel/analytics mounted in app/layout.tsx |
| Package manager | pnpm, based on pnpm-lock.yaml and pnpm-workspace.yaml |
| Linting | ESLint 9 with eslint-config-next |
dialogoi-web/
|-- app/
| |-- dialogo/[id]/page.tsx # Dialogue detail route
| |-- sobre/page.tsx # Product story and model direction
| |-- globals.css # Tailwind imports, CSS variables, and theme tokens
| |-- layout.tsx # Root layout, metadata, fonts, and analytics
| `-- page.tsx # Home route
|-- components/
| |-- ui/ # Reusable UI primitives
| |-- chat-message.tsx # Speaker-colored message row
| |-- dialog-card.tsx # Dialogue preview card
| |-- dialog-filters.tsx # Search, tag filter, sort, and list state
| |-- header.tsx # Main site header
| `-- summary-card.tsx # Dialogue summary and participants
|-- lib/
| |-- data.ts # Dialogue types, mock participants, and mock dialogues
| |-- filter-utils.ts # Pure filtering, sorting, and facet helpers
| `-- utils.ts # Shared className merge helper
|-- public/ # Static image assets
|-- components.json # shadcn component configuration
|-- next.config.ts # Minimal Next.js config
|-- package.json # Scripts and dependencies
|-- pnpm-lock.yaml # pnpm lockfile
`-- pnpm-workspace.yaml # Single-package pnpm workspace
components/component-example.tsx and components/example.tsx appear to be local UI demonstration components. They are not referenced by the current application routes.
The current publishable dialogue shape is defined in lib/data.ts.
| Type | Key fields | Purpose |
|---|---|---|
Participant |
id, name, avatar, color |
Represents an anonymized speaker in a published dialogue. |
Message |
id, participantId, content, order, timestamp |
Represents one ordered message in the readable dialogue transcript. |
Dialog |
id, title, summary, participants, messages, createdAt, tags |
Represents one published dialogue entry. |
Helper functions:
getDialogById(id)returns a dialogue from the local dataset.getParticipantById(dialog, participantId)resolves a message speaker within a dialogue.
The current sample data uses named participants and Portuguese copy. For production, the About page implies that participants should be anonymized before publication.
The current repository begins after the intended transcript-model pipeline. It assumes generated dialogue data already exists.
flowchart LR
A["Future transcript model"] -. "not implemented here" .-> B["Generated conversation"]
B -. "represented locally by" .-> C["lib/data.ts dialogue data"]
C --> D["components/dialog-filters.tsx"]
D --> E["lib/filter-utils.ts"]
E --> F["components/dialog-card.tsx"]
F --> G["app/dialogo/[id]/page.tsx"]
G --> H["components/summary-card.tsx"]
G --> I["components/chat-message.tsx"]
components/dialog-filters.tsx keeps filter state in the client, derives available tags from the local dataset, applies filterAndSortDialogs, and renders the visible card grid.
app/dialogo/[id]/page.tsx resolves one dialogue by route ID, sorts messages by order, and renders the dialogue as a readable conversation.
Prerequisites:
- Node.js version compatible with Next.js 16.
- pnpm.
Install dependencies:
pnpm installStart local development:
pnpm devNo project-specific environment variables were identified.
| Script | Command | Purpose |
|---|---|---|
dev |
next dev |
Start the local Next.js development server. |
build |
next build |
Create a production build. |
start |
next start |
Serve a production build. |
lint |
eslint |
Run ESLint using the Next.js config. |
The only validation script currently defined by the repository is linting:
pnpm lintNo unit test, integration test, end-to-end test, or visual regression setup was identified.
- The project is frozen for now.
- The AI model described on the About page is not implemented in this repository.
- There is no transcript model, audio upload, transcription, diarization, anonymization, summary generation, or tag generation code in this web app.
- Dialogue content is currently hardcoded in
lib/data.ts. - No backend API, database, CMS, migration system, or persistent content storage was identified.
- No deployment-specific configuration, CI/CD workflow, Dockerfile, or production hosting notes were identified.
- The model repository URL in
app/sobre/page.tsxappears to be a placeholder. - The UI currently contains Portuguese visible copy and metadata, while this repository's documentation is written in English.
selectedParticipantsexists inlib/filter-utils.tsbut is not exposed by the current filter UI.- No license file was identified.
TODO: no license file was identified in the current codebase.