Digital Material Language
Lol I need a paper and pen to draw here as well...
Notes and samples that explore how we can make understandable interfaces and spaces with web technology.
Pseudo-metallic
Low-res Plastic
Wood
Living Ink
Vector Screens
or LCD Screens
Etherial





Here's an example of what I mean by material language:
- Metals for machines
- Paper for texts and prints
- Wood for sounds
- Plastic for UIs


A mix between etherial, and three-dimensional.












Living ink is usually monochrome

How do we merge that etherial, hd 3d quality with charming, wonky, and colorful?

A long conversation about modifying chrome and electron
Which is the easiest to modify open source modern browser?
When it comes to open-source modern browsers, there are a few options that are considered relatively easy to modify:
1. Mozilla Firefox:
- Firefox is a popular open-source browser with a large community and extensive documentation.
- It has a well-designed extension system that allows for easy customization and development of add-ons.
- The browser's source code is readily available, and there are many resources and tutorials available for modifying and extending Firefox.
2. Chromium:
- Chromium is the open-source project that forms the basis for Google Chrome and other Chromium-based browsers.
- Chromium has a well-documented extension system and a large developer community, making it relatively easy to create and modify extensions.
- The Chromium source code is publicly available, allowing for more extensive modifications and customizations.
3. Brave:
- Brave is an open-source, privacy-focused browser that is based on the Chromium project.
- Brave has a simple and straightforward extension system, making it easy for developers to create and customize extensions.
- The Brave browser is designed with developer-friendliness in mind, with good documentation and a supportive community.
4. Vivaldi:
- Vivaldi is an open-source browser that is built on the Chromium codebase.
- Vivaldi has a focus on customization and offers a wide range of built-in features and settings that can be easily modified.
- The browser's extension system is based on the Chromium extension API, making it relatively easy for developers to create and customize extensions.
When choosing the easiest open-source modern browser to modify, the decision may depend on your familiarity with the browser's codebase, the availability of resources and documentation, and the specific requirements of your project. All of the browsers mentioned above have active communities and provide good opportunities for customization and extension development.
Tell me more about the vivaldi browser. I'm interested in the customization benefits
Sure, let me dive a bit deeper into the customization benefits of the Vivaldi browser:
1. User Interface Customization:
- Vivaldi offers an impressive level of UI customization, allowing users to tweak almost every aspect of the browser's appearance.
- Users can customize the placement and size of various browser components, such as the address bar, tabs, panels, and more.
- The browser provides a wide range of built-in themes, as well as the ability to create custom themes and apply them.
2. Keyboard Shortcuts and Gestures:
- Vivaldi has a robust system for customizing keyboard shortcuts and mouse gestures.
- Users can create their own custom shortcuts and assign them to various browser actions and commands.
- This level of customization allows power users to optimize their workflow and improve productivity.
3. Panel and Sidebar Customization:
- Vivaldi's unique panel system allows users to dock various tools and utilities, such as a note-taking app, a weather widget, or a social media feed.
- These panels can be rearranged, resized, and customized to suit individual preferences.
- The sidebar feature also allows users to access various tools and information, which can also be customized.
4. Tab Management:
- Vivaldi offers advanced tab management features, such as the ability to group and stack tabs, create tab tiling, and even save tab sessions for later use.
- Users can customize the appearance and behavior of tabs, including the tab bar layout, tab previews, and tab indicators.
5. Extensions and Addons:
- While Vivaldi's extension ecosystem is not as vast as Chrome or Firefox, the browser does support a growing number of extensions and addons.
- These extensions can be used to further customize the browser's functionality and integrate it with various web-based services.
Overall, the Vivaldi browser is designed with a focus on customization, allowing users to tailor the browser to their specific needs and preferences. This level of customization can be particularly appealing to power users, developers, and those who value a highly personalized browsing experience.
Hmm ok. I'm personally interested in the engine and tab system more than anything. So you see I would pick Electron but I don't know what I'd need to do if I wanted to implement an overflow: canvas; css prop so that it has a specific behavior.
Interesting choice to consider Electron for your needs. As for the `overflow: canvas` CSS property, I can provide some guidance on how you might approach implementing that in an Electron-based browser.
Since Electron is built on top of Chromium, the underlying rendering engine is the same as Google Chrome. This means you can leverage the existing web rendering capabilities and CSS support provided by Chromium.
To implement the `overflow: canvas` behavior, you would need to make modifications to the Chromium source code. Here's a high-level outline of the steps you might take:
1. **Set up the Chromium development environment**: You'll need to download the Chromium source code and set up the necessary build tools and dependencies to compile the browser from source. This can be a complex process, so make sure to follow the official Chromium developer guides.
2. **Locate the relevant code**: The CSS parsing and rendering logic in Chromium is spread across various components. You'll need to identify the specific areas of the codebase that handle the `overflow` property and the rendering of content within the browser viewport.
3. **Implement the `overflow: canvas` behavior**: Once you've located the relevant code, you'll need to implement the custom logic to handle the `overflow: canvas` property. This might involve modifying the CSS parser, the layout engine, and the rendering pipeline to achieve the desired behavior.
4. **Test and debug**: Thoroughly test your changes to ensure that the `overflow: canvas` implementation works as expected, and that it doesn't introduce any regressions or compatibility issues with other CSS properties and features.
5. **Integrate with Electron**: After implementing the `overflow: canvas` functionality in the Chromium codebase, you'll need to integrate the modified Chromium build with your Electron-based application. This may involve building Chromium from source and then using it as the rendering engine in your Electron app.
It's worth noting that modifying the Chromium source code can be a complex and time-consuming process, as you'll need a deep understanding of the Chromium codebase and the web rendering engine. Additionally, maintaining compatibility with future Chromium updates can be a challenge.
If the `overflow: canvas` behavior is a critical requirement for your project, it might be worth exploring alternative approaches, such as:
- Investigating if there are any existing Chromium-based browser projects or forks that have already implemented the `overflow: canvas` feature, which you could potentially build upon.
- Exploring the possibility of creating a custom rendering engine within your Electron app, rather than modifying Chromium directly.
- Considering alternative CSS solutions or JavaScript-based techniques that could achieve a similar effect without the need for a custom `overflow` implementation.
The choice will depend on the specific requirements of your project and your team's expertise in browser engine development. It's always a good idea to carefully weigh the pros and cons of each approach before committing to a significant engineering effort.
Not really related
Movement is key when it comes to living ink.
It's more about telling than asking.



I can start exploring ideas by improving graphic design tools inside the room.
- Tile Maker
- Paper Maker
- Image Printer
This looks like a good merge of the things I mentioned:
etherial - living ink - personality
A good solution for the floating UI is to use the cursor as fixed origin.
Instead of using the viewport frame, use the cursor. Things will appear around it on it's own surface that is a thing but a temporary one.
Like this type of thing:

And also, this is where bags are useful. I want to move these notes to a different room.
Metal has the essence of industry, of automation.
Plastic is the same but soft.
If I want to share this with Andrea or any of the other girls, I'd need:
- Clear access
- Smoother camera controls
- Global Pen
- Tile Maker
- Paper Maker
- Image Printer
- Even a tile maker
The purpose of materials is not only to provide a consistent style but to have a way to compose machines, UIs, tools, etc.
Materials are for building.
If materials have pseudo-physical properties that affect how things interact with each other it would make it natural and organic to decide which materials to use.
Instead of giving full control of CSS and etc, we provide rules for this room.
So I guess it's about defining what those rules are.
It may be a long way to determine what these materials are.
So what I want is people to sculpt their things, their tools, etc.
So this means that instead of a design system and predefined CSS rules, you a richer world that helps you mold things.
Since this board is becoming a place where I'm just exploring ideas, I'll talk about one that's on my head as well.
It's basically sex but for modules/rooms.
It's a hard problem.
It's related to upgradability and stuff like that.
On the other hand, I think I should continue to make this a tool for myself, I mean it already is, but still I think I should continue doing this.
Paper Prints
This game follows some of the ideas I have for material language.


This is where I actually need bags. I want to move these things to the sand room.
I have to start teaching people how to use other existing tools.
- mmm.page
- notion
- obsidian
- are.na
I think that by doing this it'll take me back when I used to watch tutorials.
It's been a long time since I'm there and I think I'm way too deep in my technical understanding of websites that I take a lot for granted. Like I just assume that other frontend devs know about the Shadow DOM API but it's actually not common. So now just imagine how many things I assume about non-tech people.
I like this game's intro/onboarding process.
I want to do something similar.
You get like a welcome package that you open and that's how you explore the interface.
Z-Index stuff
I currently have an html element that has a list of cards in it. each card exists in 2d space, and I determine the z order simply by the order in which they are written in the html. Since each card can be dragged, what I currently do is that I just move it to the end of the stack thus not requiring z-index. But I'm looking for a better solution that doesn't remount the html cards that doesn't require me to set the z-index of all cards. Can you help me brain storm?
Certainly! Here are a few ideas you can consider to improve your current solution without having to set the z-index of all cards:
1. **Using CSS `z-index` with a positioning context**: Instead of relying on the order of the cards in the HTML, you can create a positioning context (e.g., using `position: relative` on the parent container) and then use `z-index` on the individual cards. This way, you can control the stacking order without having to reorder the HTML elements.
```css
.card-container {
position: relative;
}
.card {
position: absolute;
z-index: 1; /* Initial z-index value */
}
.card.dragging {
z-index: 2; /* Increased z-index for the dragging card */
}
```
2. **Implementing a custom stacking order using JavaScript**: You can keep track of the current stacking order of the cards in a separate data structure (e.g., an array) and update it when a card is dragged. Then, whenever a card is moved, you can update its position in the DOM based on the new stacking order, without needing to remount the entire HTML.
```javascript
let stackingOrder = [card1, card2, card3, ...];
function updateStackingOrder(draggedCard) {
// Remove the dragged card from the current position
stackingOrder = stackingOrder.filter((card) => card !== draggedCard);
// Add the dragged card to the end of the stacking order
stackingOrder.push(draggedCard);
// Update the DOM positions based on the new stacking order
stackingOrder.forEach((card, index) => {
card.style.zIndex = index + 1;
});
}
```
3. **Using a library like Sortable.js**: There are various libraries available that provide drag-and-drop functionality and handle the stacking order for you. One such library is Sortable.js, which allows you to easily reorder elements in a list and automatically updates the z-index based on the new order. This can be a convenient solution if you don't want to implement the stacking order logic yourself.
```javascript
import Sortable from 'sortable.js';
const container = document.querySelector('.card-container');
new Sortable(container, {
animation: 150,
onUpdate: () => {
// Update your application state or logic based on the new order
},
});
```
4. **Leveraging CSS `transform` and `z-index`**: Instead of using `position: absolute` and updating the DOM positions, you can use CSS `transform` to move the cards. This way, the cards will maintain their position in the DOM, and you can update their stacking order by changing the `z-index` property.
```css
.card {
position: relative;
transform: translateZ(0); /* Establish a new stacking context */
z-index: 1; /* Initial z-index value */
}
.card.dragging {
z-index: 2; /* Increased z-index for the dragging card */
transform: translateZ(0) scale(1.1); /* Optionally, add a scale transformation */
}
```
The key here is to establish a new stacking context using `transform: translateZ(0)`, which allows you to control the stacking order of the cards without having to update their positions in the DOM.
These are just a few ideas to consider. The best solution will depend on your specific requirements, the complexity of your application, and the trade-offs you're willing to make. Evaluate each approach and choose the one that best fits your needs.
How many elements in a div is too many? tens of thousands? consider each has sub elements but not that many
The number of elements within a single `div` that is considered "too many" can vary depending on several factors, such as the complexity of the elements, the browser's capabilities, and the performance requirements of your application.
In general, it's recommended to keep the number of elements within a single container (like a `div`) as low as possible, as managing a large number of elements can have a negative impact on performance and user experience.
Here are some general guidelines on the number of elements within a `div`:
1. **Tens of elements**: This is generally considered a reasonable number of elements within a single `div`. Handling tens of elements (e.g., 10-50) should not cause significant performance issues in modern browsers, as long as the elements are not overly complex.
2. **Hundreds of elements**: While it's possible to have hundreds of elements within a `div`, it's important to consider the overall complexity and the performance impact. Rendering and manipulating hundreds of elements can become challenging, especially on older or less powerful devices.
3. **Thousands of elements**: Having thousands of elements within a single `div` is generally not recommended, as it can lead to significant performance issues, such as slow rendering, sluggish interactions, and potential memory leaks. In most cases, you should avoid this scenario and consider alternative approaches, such as pagination, lazy loading, or breaking down the content into multiple containers.
4. **Tens of thousands of elements**: Handling tens of thousands of elements within a single `div` is generally not advisable, as it can quickly become unmanageable and lead to severe performance problems, even on the most powerful devices. In such cases, it's crucial to re-evaluate your application's architecture and find ways to optimize the rendering and management of these elements.
It's important to note that the number of elements is not the only factor to consider. The complexity of the elements, the number of sub-elements, and the overall functionality of your application also play a significant role in determining the appropriate number of elements within a `div`.
If you find yourself in a situation where you need to handle a large number of elements, consider the following strategies to improve performance and maintainability:
- **Pagination**: Break down the content into smaller, manageable chunks and display them one at a time.
- **Lazy loading**: Load elements only when they are needed, such as when the user scrolls or interacts with the content.
- **Virtual scrolling**: Use techniques like virtual scrolling to only render the visible elements and optimize the rendering process.
- **Efficient data structures and algorithms**: Carefully design your data structures and algorithms to ensure efficient management and manipulation of the elements.
- **Modularization**: Break down your application into smaller, more manageable components to improve code organization and maintainability.
By following these best practices and constantly monitoring the performance of your application, you can effectively manage large numbers of elements within a `div` without compromising the user experience.
What if for the remounting issue, I just apply a z-index to elevate but I don't reorder until it is dropped. This way you don't feel the lift weight.
Related to api keys and other sensitive information that's stored locally.
What if it's included in the html but it's encrypted, and so you need a pass to get those keys but you only use the password once per session.