If we wanna make a minimal client having features roughly specified here, these are the steps to take:

  1. Create a repository for the whole thing.

Use npx create-nx-workspace <my client name> for that - create the repo and change to the directory.

npx create-nx-workspace my-micropub-site --preset=empty --cli=nx &&

  1. Create the micropub client application.

Say you want to use React for this client. You’d do this:

npm i -D @nrwl/react && nx g @nrwl/react:app mp-client --routing --style=scss --tags=app

  1. Create stubs for the features we need

Let’s start with the minimal set of things we want. The features, or in this case, pages:

  • home: a “dashboard” page, or auth page if not logged in
  • new entry: create a note or article
  • edit entry: edit note or article
  • list entries: list notes and articles

Let’s see, creating those ui/feature libs would look like this:

nx g @nrwl/react:lib --tags=feat ui-home && \
nx g @nrwl/react:lib --tags=feat ui-create-entry && \
nx g @nrwl/react:lib --tags=feat ui-edit-entry && \
nx g @nrwl/react:lib --tags=feat ui-list-entries
  1. Update the application to use the libs

Basically we want to replace the app.tsx content with this:

import React from 'react';

import './app.scss';

import { Route, Link } from 'react-router-dom';
import { UiHome } from '@accessorinesses-delusionist/ui-home';
import { UiCreateEntry } from '@accessorinesses-delusionist/ui-create-entry';
import { UiListEntries } from '@accessorinesses-delusionist/ui-list-entries';
import { UiEditEntry } from '@accessorinesses-delusionist/ui-edit-entry';

export const App = () => {
  return (
    <div className="app">
      <Route
        path="/"
        exact
        component={UiHome}
      />
      <Route
        path="/new"
        component={UiCreateEntry}
        />
      <Route
        path="/list"
        component={UiListEntries}
        />
      <Route
        path="/edit/:entryId"
        component={UiEditEntry}
        />
    </div>
  );
};

export default App;

Next steps:

Next would be to implement these features.