Skip to content

ara-foundation/web

Repository files navigation

Ara Web

Ara – Build Modular Apps, share your experience and get help from others.

A collaboration platform with the financial transparency, community building and custom AI agents for your needs.

To export the data:

docker-compose run atomic-server export -p /atomic-storage-export/data.json

To run the development mode:

docker-compose up -d

Features

  • 🤖 End user made custom AI agents
  • 📝 Ara Web is Open Source
  • 🛠️ Blockchain based transparency
  • 🔌 Community: contributors, freelancers or monetization
  • 🔒 Secure by default

Features of the Web

  • Responsive design
  • Scores A or A+ (depending on hosting and your images) on Accessify and Ecograder
  • Clean and minimal
  • Fluid typography
  • Dark and light mode (chosen by user's system preference)
  • About page
  • Now page (inspired by nownownow.com)
  • Microblog for found links (Today I Found...)
  • Blog for personal projects

Getting Started

First, install the packages:

npm install

Then, run the development server:

npm run dev

Open http://localhost:3000 with your browser to see the result.

Guide

Using RPCs within the pages. In order to use RPCs in the web pages, simply import the component. The inputs to the components must be passed as the data

Contribution

Architecture

Let's first explain the components that made up the Ara Web.

The background is the same for all pages. All pages have the same classic web layout: Header, Content, Footer. Each layout also composed of three sections: Left, Center, Right.

Terminology

  • slug – indicates the unique path for the resource. Used for web pages and components within the page
  • path – combination of one or more slugs that defines the URL of the component within the page
  • url – indicates the Path of the web page
  • layout – a web page composed of the rows
  • row – a row of web components that is composed of the columns
  • column – a column of the web page where we store the web components

Web Components

  • component

Read the below sections whenever you add a new component, page, action or RPC as a checklist

Page

To make the page valid for src/scripts/page.ts the src/pages/**/*.astro must have the JSDoc comment at the beginning.

The comment must have three parameters:

  • @this Page – indicate that this is the Page
  • @param {string} Title ${text...} – The title of the web page
  • @param {string} Description ${text...} – The description of the web page

Components

To make the components available, make sure that their props are always optional. As the components list page won't pass any property during a rendering.

Also, update the component types in the src/scripts/component.ts to make sure list of components would detect it.

RPCs

Creating in Ara Web

In order to create the RPC, create a new rpc script that defines RPC Types from src/scripts/rpc/types.ts.

Then, add it to the src/scripts/rpc/index.ts list.

Todo: define what it calls and how it calls. For example, how to describe that redirect function is somewhere in the code. Or maybe to write a script and allow users to edit it, for example calling it as public_scripts.ts

Using the RPC

In order to use the RPC, we need to call it by passing inputs and optionally printing the outputs. The pages can declare that they use extensions by importing the src/components/rpc/call.astro component. The Call component receives the src/scripts/rpc/types.ts>type RpcCallType parameters as the component properties. Simply pass them.

There are already predefined rpc calls defined as type RpcCallType. They are available in src/scripts/rpc=>rpcBySlug(slug:string).

Scripts

The scripts within the Ara Web are located in the src/scripts directory. Currently only typescript scripts are supported.

Reflection on the code itself

The src/scripts/reflect is a module that turns the code into a JSON, and vice versa the JSON into the code.

It parses the data in the whole data structure of the web site and then turns it into the minimal components available for the user.

Module

Each node.js file is called as a module. Reflect supports various modules but not all due to safety or complexity reasons. To navigate through the modules, they are categorized according to the directories. For example, Page module category indicates the scripts (a.k.a modules) in the src/pages directory.

NodeJS Modules

Ara Web does support pre-built modules that consists the Ara Web itself. The third-party modules (in node_modules) nor NodeJS built in modules are not supported by default. But sometimes we need them as well. For example the icon components, or additional UI components.

Ara Web must know at the built time which of the third party modules you are going to use. Therefore, we have the src/scripts/reflect/enabledNodejsModule.ts where the supported modules are imported via the Vite plugin's glob pattern.

Contributor Tip To support the third party modules, double check them for security. Then, add them into the src/scripts/reflect/enabledNodejsModule.ts script.


Checklist to add new script

If you are adding a new script other than Typescript, update the src/scripts/reflect/script.ts to support new extension.


Getting Started

  1. Install dependencies:
npm install
  1. Start the development server:
npm run dev
  1. Build for production:
npm run build

Customization

  • Add your own avatar in the public/ directory
  • Edit src/config.ts to use your website, name, and description
  • Edit pages in src/pages/
  • Modify the layout in src/layouts/Layout.astro
  • Update styles in the respective component files
  • Make your own favicons with https://realfavicongenerator.net/

Colors

The colors were chosen using several tools to insure accessibility and contrast. The colors are all set using variables for dark and light in the global.css file. Personally, I created the palletes and gradients using these tools:


Credits

Built by Tim Eaton - timeaton.dev.

Anonymous Avatar by maniskis12 on Freeimages.com

All dummy text and posts generated with Claude AI.

License

MIT