Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion docs/contribution/governance.md
Original file line number Diff line number Diff line change
Expand Up @@ -204,7 +204,7 @@ Open → Triaged → Accepted → In Progress → Review → Closed

#### Reporting Process

1. **Contact**: Report violations to conduct@monynha.com
1. **Contact**: Report violations to hello@monynha.com
2. **Investigation**: Core team investigates reports
3. **Resolution**: Appropriate action taken
4. **Communication**: Outcome communicated to involved parties
Expand Down
9 changes: 9 additions & 0 deletions docs/repositories/_category_.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
{
"label": "Repositories",
"position": 8,
"link": {
"type": "generated-index",
"description": "Discover repositories for the user marcelo-m7 and Monynha-Softwares organization (client-side).",
"slug": "/docs/repositories"
}
}
12 changes: 12 additions & 0 deletions docs/repositories/index.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
---
id: repositories-legacy
slug: /docs/repositories/legacy
title: Repositories (legacy)
sidebar_position: 999
---

# Repositories (legacy)

This legacy file has been replaced by a better client-side MDX page. See the primary page: [Repositories](/docs/repositories).

If you are a maintainer and want to remove the legacy file, you can delete `docs/repositories/index.md` after confirming the new page works.
40 changes: 40 additions & 0 deletions docs/repositories/index.mdx
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
---
title: Repositories
sidebar_position: 8
---

import Repositories from '@site/src/components/Repositories';

import React from 'react';

# Repositories

This page lists repositories discovered from the GitHub user `marcelo-m7` and the organization `Monynha-Softwares`. The fetching is done entirely in the browser using the public GitHub REST API.

The page accepts optional query parameters in the URL:

- `mode`: `user` (show only user repos), `org` (show only organization repos), or `both` (default)
- `showForks`: `1` or `true` to include forked repos

Examples:

- `/docs/repositories?mode=user` — show only `marcelo-m7` repos
- `/docs/repositories?mode=org&showForks=1` — show only `Monynha-Softwares` repos including forks

export function RepositoryPageWrapper() {
const params = typeof window !== 'undefined' ? new URLSearchParams(window.location.search) : new URLSearchParams('');
const mode = params.get('mode') || 'both';
const showForks = params.get('showForks') === '1' || params.get('showForks') === 'true';
let user = 'marcelo-m7';
let org = 'Monynha-Softwares';
if (mode === 'org') user = null;
if (mode === 'user') org = null;
return <Repositories user={user} org={org} showForks={showForks} />;
}

<RepositoryPageWrapper />

Notes:

- Data is cached in `localStorage` for 6 hours to reduce requests and avoid hitting anonymous API rate limits.
- If you need higher rate limits, provide a GitHub personal access token, but do not embed secrets in client-side code.
13 changes: 9 additions & 4 deletions docusaurus.config.js
Original file line number Diff line number Diff line change
Expand Up @@ -98,6 +98,7 @@ const config = {
position: 'left',
items: [
{ to: '/docs/intro', label: 'Introduction' },
{ to: '/docs/repositories', label: 'Repositories' },
{ to: '/docs/technologies/frontend-stack', label: 'Technologies' },
{ to: '/docs/guidelines/ux-guidelines', label: 'Guidelines' },
{ to: '/docs/identity/brand-guidelines', label: 'Identity' },
Expand All @@ -110,9 +111,9 @@ const config = {
label: 'Company',
position: 'right',
items: [
{ label: 'Portfolio', href: 'https://marcelo.monynha.com/portfolio' },
{ label: 'Projects', href: 'https://monynha.com/projects' },
{ label: 'Monynha.com', href: 'https://monynha.com' },
{ label: 'Projects', href: 'https://monynha.com/projetos' },
{ label: 'Portfolio', href: 'https://marcelo.monynha.com/portifolio' },
],
},
{
Expand All @@ -132,6 +133,10 @@ const config = {
label: 'Introduction',
to: '/docs/intro',
},
{
label: 'Repositories',
to: '/docs/repositories',
},
{
label: 'Projects',
to: '/docs/projects/boteco-pro',
Expand All @@ -151,11 +156,11 @@ const config = {
},
{
label: 'Projects',
href: 'https://monynha.com/projetos',
href: 'https://monynha.com/projects',
},
{
label: 'Portfolio',
href: 'https://marcelo.monynha.com/portifolio',
href: 'https://marcelo.monynha.com/portfolio',
},
],
},
Expand Down
189 changes: 83 additions & 106 deletions sidebars.js
Original file line number Diff line number Diff line change
Expand Up @@ -3,117 +3,94 @@
// This runs in Node.js - Don't use client-side code here (browser APIs, JSX...)

/**
* Creating a sidebar enables you to:
- create an ordered group of docs
- render a sidebar for each doc of that group
- provide next/previous navigation
* Dynamic sidebar generator.
*
* This file programmatically inspects the `docs/` directory and generates sidebar
* categories for top-level folders that contain documentation. It preserves the
* generated-index link pattern and tries to create deterministic ordering.
*
* If you need fully manual control over a specific category, replace or edit
* the generated block below.
*/

The sidebars can be generated from the filesystem, or explicitly defined here.
import fs from 'fs';
import path from 'path';
import { fileURLToPath } from 'url';

Create as many sidebars as you want.
const __filename = fileURLToPath(import.meta.url);
const __dirname = path.dirname(__filename);
const DOCS_DIR = path.join(__dirname, 'docs');

@type {import('@docusaurus/plugin-content-docs').SidebarsConfig}
*/
const sidebars = {
// Custom sidebar with proper ordering
tutorialSidebar: [
'intro',
{
type: 'category',
label: 'Projects',
link: {
type: 'generated-index',
description: 'Documentation for Monynha Softwares projects: overviews, tech stacks, and guides.',
},
items: [
'projects/boteco-pro',
'projects/artleo-creative-spaces/index',
'projects/boteco-pt/index',
'projects/facodi/index',
'projects/monynha-com/index',
'projects/monynha-online/index',
'projects/monynha-tech/index',
'projects/sweet-price/index'
]
},
{
type: 'category',
label: 'Technologies',
link: {
type: 'generated-index',
description: 'Technology stack documentation covering frontend, backend, DevOps tools, and development practices.',
},
items: [
'technologies/frontend-stack',
'technologies/backend-stack',
'technologies/devops-tools'
]
},
{
type: 'category',
label: 'Guidelines',
link: {
type: 'generated-index',
description: 'Development guidelines including UX principles, accessibility standards, code conventions, and security practices.',
},
items: [
'guidelines/ux-guidelines',
'guidelines/accessibility',
'guidelines/code-conventions',
'guidelines/security'
]
},
{
type: 'category',
label: 'Identity',
link: {
type: 'generated-index',
description: 'Visual identity and UI component documentation including brand guidelines and component libraries.',
},
items: [
'identity/brand-guidelines',
'identity/ui-components'
]
},
{
type: 'category',
label: 'Contribution',
link: {
type: 'generated-index',
description: 'Contribution guidelines, development workflow, and governance model for the Monynha Softwares community.',
},
items: [
'contribution/contributing',
'contribution/governance'
]
},
{
type: 'category',
label: 'Architecture',
link: {
type: 'generated-index',
description: 'Technical architecture documentation covering monorepo structure, backend systems, and CI/CD pipelines.',
},
items: [
'architecture/monorepo-structure',
'architecture/backend-architecture',
'architecture/ci-cd'
]
function readCategoryMeta(dir) {
try {
const p = path.join(DOCS_DIR, dir, '_category_.json');
if (fs.existsSync(p)) return JSON.parse(fs.readFileSync(p, 'utf8'));
} catch (e) {
// ignore
}
return { label: dir.replace(/-/g, ' ').replace(/\b\w/g, (s) => s.toUpperCase()) };
}

function listDocsInDir(dir) {
const base = path.join(DOCS_DIR, dir);
if (!fs.existsSync(base)) return [];
const entries = fs.readdirSync(base, { withFileTypes: true });
const items = [];
for (const ent of entries) {
if (ent.name === '_category_.json') continue;
const full = path.join(base, ent.name);
if (ent.isFile() && /\.(md|mdx)$/.test(ent.name)) {
const id = `${dir}/${ent.name.replace(/\.(md|mdx)$/, '')}`;
items.push(id);
} else if (ent.isDirectory()) {
// prefer directory index.md/mdx
const idxMd = path.join(full, 'index.md');
const idxMdx = path.join(full, 'index.mdx');
if (fs.existsSync(idxMd) || fs.existsSync(idxMdx)) {
items.push(`${dir}/${ent.name}/index`);
} else {
const subfiles = fs.readdirSync(full).filter((n) => /\.(md|mdx)$/.test(n));
subfiles.forEach((sf) => items.push(`${dir}/${ent.name}/${sf.replace(/\.(md|mdx)$/, '')}`));
}
}
],
}
// deterministic ordering: index first, then alpha
items.sort((a, b) => {
if (a.endsWith('/index') && !b.endsWith('/index')) return -1;
if (b.endsWith('/index') && !a.endsWith('/index')) return 1;
return a.localeCompare(b);
});
return items;
}

// Top-level folders we want to expose in the sidebar (in desired order).
const TOP_FOLDERS = [
'projects',
'repositories',
'technologies',
'guidelines',
'identity',
'contribution',
'architecture',
];

// But you can create a sidebar manually
/*
tutorialSidebar: [
'intro',
'hello',
{
type: 'category',
label: 'Tutorial',
items: ['tutorial-basics/create-a-document'],
const tutorialSidebar = ['intro'];

for (const folder of TOP_FOLDERS) {
const items = listDocsInDir(folder);
if (items.length === 0) continue;
const meta = readCategoryMeta(folder);
tutorialSidebar.push({
type: 'category',
label: meta.label || folder,
link: {
type: 'generated-index',
description: (meta.link && meta.link.description) || `Documentation for ${meta.label || folder}`,
},
],
*/
};
items,
});
}

const sidebars = { tutorialSidebar };

export default sidebars;
18 changes: 9 additions & 9 deletions src/components/HomepageFeatures/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -4,32 +4,32 @@ import styles from './styles.module.css';

const FeatureList = [
{
title: 'Projetos Inovadores',
title: 'Innovative Projects',
Svg: require('@site/static/img/undraw_docusaurus_mountain.svg').default,
description: (
<>
Explore nossa documentação completa de projetos, desde sistemas de gestão
para bares e restaurantes até plataformas educacionais e soluções web modernas.
Browse our project documentation — from restaurant management systems to
educational platforms and modern web applications.
</>
),
},
{
title: 'Tecnologias Avançadas',
title: 'Advanced Technologies',
Svg: require('@site/static/img/undraw_docusaurus_tree.svg').default,
description: (
<>
Conheça as tecnologias que utilizamos: TypeScript, Flutter, Convex, Coolify,
Docker e muito mais. Guias práticos e melhores práticas incluídas.
Learn about the technologies we use: TypeScript, Flutter, Convex, Coolify,
Docker and more — with practical guides and recommended best practices.
</>
),
},
{
title: 'Padrões e Qualidade',
title: 'Standards & Quality',
Svg: require('@site/static/img/undraw_docusaurus_react.svg').default,
description: (
<>
Acesse nossos padrões internos de desenvolvimento, guias de contribuição
e práticas recomendadas para manter a qualidade em todos os projetos.
Access our internal development standards, contribution guides, and
quality practices that help maintain excellence across projects.
</>
),
},
Expand Down
Loading