fucking around, pro

This commit is contained in:
lovebird 2025-03-28 08:31:35 +01:00
parent c31962fc63
commit 060ef763d3
16 changed files with 2176 additions and 13 deletions

View File

@ -23,7 +23,7 @@
"format": "unix-time"
}
],
"default": "2025-03-28T05:25:33.886Z"
"default": "2025-03-28T07:16:15.601Z"
},
"description": {
"type": "string",

View File

@ -1,5 +1,5 @@
export default new Map([
["src/content/resources/workflow.mdx", () => import("astro:content-layer-deferred-module?astro%3Acontent-layer-deferred-module=&fileName=src%2Fcontent%2Fresources%2Fworkflow.mdx&astroContentModuleFlag=true")],
["src/content/infopages/contact.mdx", () => import("astro:content-layer-deferred-module?astro%3Acontent-layer-deferred-module=&fileName=src%2Fcontent%2Finfopages%2Fcontact.mdx&astroContentModuleFlag=true")]]);
["src/content/infopages/contact.mdx", () => import("astro:content-layer-deferred-module?astro%3Acontent-layer-deferred-module=&fileName=src%2Fcontent%2Finfopages%2Fcontact.mdx&astroContentModuleFlag=true")],
["src/content/resources/workflow.mdx", () => import("astro:content-layer-deferred-module?astro%3Acontent-layer-deferred-module=&fileName=src%2Fcontent%2Fresources%2Fworkflow.mdx&astroContentModuleFlag=true")]]);

File diff suppressed because one or more lines are too long

View File

@ -3,7 +3,7 @@
"messages": [
{
"role": "user",
"content": "Extract the required tools, software hardware from the following tutorial. Return as Markdown chapters (H3) with very short bullet points (not bold), with links, max. 5.\n\nText to process:\nScrew-on molds, clamping beds, and other methods, such as car jacks, require time and manual effort to connect molds to the injector. This method, using a motorcycle stand, provides sufficient travel to clamp the mold against the injector and allows the use of leg power, keeping the hands free. \n\nThis approach also facilitates the lifting of heavier molds or accessories like clamps, potentially reducing the need for bolting the mold for clamping.\n\nThis technique is suitable for conical-style injection nozzles and chamfered-style molds. The machines used in this guide are from PlasticPreneur.\n\n\nUser Location: Lancaster, United Kingdom of Great Britain and Northern Ireland (the)\n\nAttached is a video explaining the process and the necessary parts.\n\nWe located our first item locally on Facebook Marketplace. Alternatively, you might contact workshops that service bikes, as they may possess older models. The internet also provides a convenient resource, and you can easily find these by searching for terms such as \"motorcycle stand\" or \"dirtbike stand.\"\n\nWe employed four pieces of wood, each measuring 3x2 (7.6 cm x 5.1 cm), at each corner of the flat plate on the stand, finishing with a flat piece of wood on top to create an elevated platform for the molds. This structure could alternatively be constructed from metal and vary in shape if necessary. The space in the center of the pillars is convenient for storing height-adjustment blocks.\n\nYou may find that the existing height suffices, or you can add wooden blocks to achieve the desired elevation when utilizing a floor-based injection molder.\n\nAn alternative design could involve shortening the pillars and adding a tufftuff jack on top. This would eliminate the need for varied thicknesses of wooden blocks based on the mold being used, as the tufftuff jack (with a plate on top) allows adjustment of the overall working height. The bike stand can then provide the additional travel required to interface with the nozzle.\n\nWe found that, initially, this lever is positioned rather high for using it multiple times throughout the day. If seeking a rigorous exercise routine, it may be left as initially configured. However, we preferred a more convenient setup for continual use, and discovered that reversing the arm that integrates with the lever works exceptionally well.\n\nWe drilled an additional hole in the rod extending from the base, as well as corresponding holes in the arm that attaches. This allowed us to insert an M8 bolt (5/16 inch) to securely fasten it in place. The supplementary bolt behind the arm prevents it from pivoting excessively, ensuring a stable footing.\n\nYou might consider designing an alternative system that enhances ergonomic functionality or visual appeal. Feel free to innovate!\n\nPlease view the video for a clearer explanation."
"content": "Return a list of useful references (only with links), as Markdown, grouped : Articles, Books, Papers, Youtube, Opensource Designs, ... Dont comment !\n\nText to process:\nCreate a climbing brush utilizing plastic dough and woodworking techniques to craft a distinctive pattern.\n\nNo shredder or additional equipment is required, only an oven. However, using power tools such as a sander, saw, or router will simplify the process.\n\nFor any potential improvements, kindly leave comments or contact us through social media.\n\n\nUser Location: Hong Kong, Hong Kong\n\n## Required Tools for the Project\n\n- Oven\n- Oven tray\n- Teflon Paper x2\n- Heat-resistant gloves\n- Mould, at least 11.8 inches (30 cm) in width, 98.4 inches (250 cm) in length, and 7.9 inches (20 cm) in height\n- HDPE plastic\n- White glue\n- Saw (such as jaw saw or band saw)\n- Sander (with grits 40, 80, 120, 240, 400, 800, 1000)\n- Polisher with a wool pad\n- Soldering iron\n- Woodworking CNC router\n\nFor this project, HDPE plastic is required, as tests with PP revealed difficulty in kneading. Ensure the plastics are clean and free of labels. Cut them into pieces and sort by color.\n\nThe quantity of plastic necessary depends on the mold's size. For every 1 cm³ (0.061 in³) of volume, one gram (0.035 oz) of plastic is needed. In this case, approximately 850 grams (30 oz) of HDPE is required.\n\nLayer the plastic sheet on the oven tray with a Teflon sheet between each layer. If the plastic pieces do not stack neatly, place them in a separate container with a Teflon sheet. \n\nPreheat the oven to 180-190 degrees Celsius (356-374 degrees Fahrenheit) and heat the plastic for approximately 25-30 minutes, or until melted.\n\nUsing a pair of thick gloves, remove the plastic. Stack the pieces, cut, and fold them. Explore and develop a method to layer multiple colors in the plastic material effectively.\n\nAfter a few minutes, the 'dough' should cool down and become too firm to knead. Place it back in the oven, melt it again, and repeat until the desired pattern is achieved.\n\nWhen you are satisfied with the dough, place it into the mold and press with a heavy object. Allow it to cool.\n\nFor larger molds, cut a strip approximately 1.18 inches x 9.84 inches x 0.98 inches (30mm x 250mm x 25mm) using a saw. A wood-cutting blade is suitable for this task.\n\nPrint the outline of the brush to the correct scale and attach it to the strip using white glue. If the surface is not level and difficult to adhere to, sand it with an abrasive tool. Then cut out the outline, leaving an offset of 1/16\" to 1/8\" for additional sanding.\n\nSand the plastic into the desired shape using sandpaper with grits of 40, 80, or 120. Both a belt sander and a hand sander can be utilized effectively.\n\nIf there are any holes in the brush, fill them with leftover materials using a soldering iron. Trim the excess plastic with a cutter and sand it again.\n\nWhen the shape of the brush is formed, continue sanding until reaching 1000 grits. (The term \"grits\" remains the same, as it is a measurement scale for sandpaper.) Then, polish the brush with a wool pad at high speed. If any scratches appear, sand it again.\n\nWhile waxing during polishing is optional, it is not required.\n\nApply adhesive to the area to be milled on the brush and proceed with milling using a CNC Router. Retain 0.04 to 0.08 inches (1-2 mm) of the brush edge. The hole should have a minimum depth of 0.39 to 0.59 inches (10-15 mm) to ensure the stability of the brush bristles.\n\nAlternatively, drilling holes is also an option, though it will significantly increase the time required to insert the bristles.\n\nDrill a hole for an M3-M5 screw at the end of the brush to attach a rope.\n\nImportant: Use masking tape to protect the brushes.\n\nTo insert the hair, use epoxy. Fill the area with 3-5 mm (0.12-0.2 inches) of epoxy and place the hair until the space is filled.\n\nAllow the epoxy to set.\n\nMaintain approximately 0.79 inches (20 mm) for the tip of the brush, and 0.59 inches (15 mm) for another direction, as the tip wears down more rapidly.\n\nThere is no reason to make a climbing brush unless you intend to climb. Visit your climbing gym or the crag and start using your new brush to clean the holds."
},
{
"role": "user",

1861
package-lock.json generated

File diff suppressed because it is too large Load Diff

View File

@ -15,7 +15,9 @@
"test:lighthouse": "lighthouse https://polymech.io/en --output json --output html --output-path ./dist/reports/report.html --save-assets --chrome-flags=\"--window-size=1440,700 --headless\"",
"test:debug": "playwright test",
"test:ui": "playwright test --ui",
"clean": "rm -rf dist"
"clean": "rm -rf dist",
"test:base": "vitest run src/base",
"test:base:watch": "vitest watch src/base"
},
"dependencies": {
"@astrojs/compiler": "^2.10.4",
@ -93,6 +95,8 @@
"@types/google-publisher-tag": "^1.20250210.0",
"micromark-util-sanitize-uri": "^2.0.1",
"normalize-url": "^8.0.1",
"sass-embedded": "^1.83.4"
"sass-embedded": "^1.83.4",
"vitest": "^1.3.1",
"@vitest/coverage-v8": "^1.3.1"
}
}

114
src/base/markdown.test.ts Normal file
View File

@ -0,0 +1,114 @@
import { describe, it, expect } from 'vitest';
import { filterMarkdownLinks } from './markdown.js';
describe('filterMarkdownLinks', () => {
it('should filter out exact URLs', () => {
const markdown = 'Check out [link1](https://example.com) and [link2](https://other.com)';
const filters = [{ pattern: 'https://example.com' }];
const result = filterMarkdownLinks(markdown, filters);
expect(result).toBe('Check out link1 and [link2](https://other.com)');
});
it('should replace URLs with custom text', () => {
const markdown = 'Check out [link1](https://example.com) and [link2](https://other.com)';
const filters = [{ pattern: 'https://example.com', replacement: 'REPLACED' }];
const result = filterMarkdownLinks(markdown, filters);
expect(result).toBe('Check out REPLACED and [link2](https://other.com)');
});
it('should filter out URLs matching regex patterns', () => {
const markdown = 'Visit [spam](https://spam.com) and [ads](https://advertisement.com)';
const filters = [
{ pattern: /spam\.com/ },
{ pattern: /advertisement/ }
];
const result = filterMarkdownLinks(markdown, filters);
expect(result).toBe('Visit spam and ads');
});
it('should replace URLs matching regex patterns with custom text', () => {
const markdown = 'Visit [spam](https://spam.com) and [ads](https://advertisement.com)';
const filters = [
{ pattern: /spam\.com/, replacement: 'SPAM' },
{ pattern: /advertisement/, replacement: 'ADS' }
];
const result = filterMarkdownLinks(markdown, filters);
expect(result).toBe('Visit SPAM and ADS');
});
it('should handle nested markdown elements', () => {
const markdown = '**Bold text with [link](https://example.com) inside**';
const filters = [{ pattern: 'https://example.com' }];
const result = filterMarkdownLinks(markdown, filters);
expect(result).toBe('**Bold text with link inside**');
});
it('should handle nested markdown elements with replacement', () => {
const markdown = '**Bold text with [link](https://example.com) inside**';
const filters = [{ pattern: 'https://example.com', replacement: 'REPLACED' }];
const result = filterMarkdownLinks(markdown, filters);
expect(result).toBe('**Bold text with REPLACED inside**');
});
it('should preserve non-matching links', () => {
const markdown = '[keep](https://keep.com) and [remove](https://remove.com)';
const filters = [{ pattern: 'https://remove.com' }];
const result = filterMarkdownLinks(markdown, filters);
expect(result).toBe('[keep](https://keep.com) and remove');
});
it('should handle empty filters array', () => {
const markdown = '[link](https://example.com)';
const filters: { pattern: string | RegExp; replacement?: string }[] = [];
const result = filterMarkdownLinks(markdown, filters);
expect(result).toBe('[link](https://example.com)');
});
it('should handle complex markdown with multiple links', () => {
const markdown = '# Title\n\nSome text with [link1](https://example.com) and [link2](https://spam.com).\n\n## Subtitle\n\nMore text with [link3](https://advertisement.com) and [link4](https://good.com)';
const filters = [
{ pattern: 'https://example.com' },
{ pattern: /spam\.com/ },
{ pattern: /advertisement/ }
];
const result = filterMarkdownLinks(markdown, filters);
expect(result).toBe('# Title\n\nSome text with link1 and link2.\n\n## Subtitle\n\nMore text with link3 and [link4](https://good.com)');
});
it('should handle complex markdown with multiple replacements', () => {
const markdown = '# Title\n\nSome text with [link1](https://example.com) and [link2](https://spam.com).\n\n## Subtitle\n\nMore text with [link3](https://advertisement.com) and [link4](https://good.com)';
const filters = [
{ pattern: 'https://example.com', replacement: 'REPLACED1' },
{ pattern: /spam\.com/, replacement: 'REPLACED2' },
{ pattern: /advertisement/, replacement: 'REPLACED3' }
];
const result = filterMarkdownLinks(markdown, filters);
expect(result).toBe('# Title\n\nSome text with REPLACED1 and REPLACED2.\n\n## Subtitle\n\nMore text with REPLACED3 and [link4](https://good.com)');
});
it('should handle links with special characters', () => {
const markdown = '[special](https://example.com/path?param=value#fragment)';
const filters = [{ pattern: 'https://example.com' }];
const result = filterMarkdownLinks(markdown, filters);
expect(result).toBe('special');
});
it('should handle links with special characters and replacement', () => {
const markdown = '[special](https://example.com/path?param=value#fragment)';
const filters = [{ pattern: 'https://example.com', replacement: 'REPLACED' }];
const result = filterMarkdownLinks(markdown, filters);
expect(result).toBe('REPLACED');
});
});

78
src/base/markdown.ts Normal file
View File

@ -0,0 +1,78 @@
import { fromMarkdown } from 'mdast-util-from-markdown';
import { toMarkdown } from 'mdast-util-to-markdown';
import { Root } from 'mdast';
type LinkFilter = {
pattern: string | RegExp;
replacement?: string;
};
/**
* Filters out or replaces specified links from markdown content
* @param markdown - The markdown string to filter
* @param filters - Array of link filters with optional replacement text
* @returns Filtered markdown string
*/
export function filterMarkdownLinks(markdown: string, filters: LinkFilter[]): string {
// Parse markdown to AST
const tree = fromMarkdown(markdown) as Root;
// Function to check if a URL should be filtered and get replacement text
const shouldFilter = (url: string): string | null => {
for (const filter of filters) {
if (filter.pattern instanceof RegExp) {
if (filter.pattern.test(url)) {
return filter.replacement || '';
}
} else if (url.includes(filter.pattern)) {
return filter.replacement || '';
}
}
return null;
};
// Visit all nodes and remove filtered links
const visit = (node: any) => {
if (node.type === 'link' && node.url) {
const replacement = shouldFilter(node.url);
if (replacement !== null) {
// Replace link with replacement text or its text content
node.type = 'text';
node.value = replacement || node.children?.[0]?.value || '';
delete node.url;
delete node.children;
}
}
if (node.children) {
node.children = node.children.map((child: any) => visit(child));
}
return node;
};
// Process the tree
const filteredTree = visit(tree);
// Convert back to markdown with options to minimize extra newlines
return toMarkdown(filteredTree, {
bullet: '-',
listItemIndent: 'one',
tightDefinitions: true,
handlers: {
text: (node, _, context) => {
const value = node.value.replace(/\n+$/, '');
return value;
}
}
}).trim();
}
/**
* Example usage:
* const filtered = filterMarkdownLinks(markdown, [
* { pattern: 'https://example.com', replacement: 'REPLACED' },
* { pattern: /spam\.com/, replacement: 'SPAM' },
* { pattern: /advertisement/ }
* ]);
*/

View File

@ -176,7 +176,7 @@ const to_github = async (item: IHowto) => {
'',
`# ${item.title}`,
'',
item.cover_image ? `![${item.title}](${item.cover_image.name})` : '',
item.cover_image ? `![${item.title}](${sanitizeFilename(item.cover_image.name)})` : '',
'',
item.description,
item.user?.geo ? `\nUser Location: ${item.user.geo.city ? `${item.user.geo.city}, ` : ''}${item.user.geo.countryName || ''}` : '',
@ -189,7 +189,7 @@ const to_github = async (item: IHowto) => {
step.text,
'',
// Add step images if any
...step.images.map(img => `\n![${img.name}](./${img.name})\n`)
...step.images.map(img => `\n![${img.name}](./${sanitizeFilename(img.name)})\n`)
].join('\n')),
'',
'## Resources',
@ -222,7 +222,7 @@ const to_mdx = async (item: IHowto) => {
'',
`# ${item.title}`,
'',
item.cover_image ? `<Image src={import('./${item.cover_image.name}')} alt="${item.title}" />` : '',
item.cover_image ? `<Image src={import('./${sanitizeFilename(item.cover_image.name)}')} alt="${item.title}" />` : '',
'',
item.description,
item.user?.geo ? `\nUser Location: ${item.user.geo.city ? `${item.user.geo.city}, ` : ''}${item.user.geo.countryName || ''}` : '',
@ -235,7 +235,7 @@ const to_mdx = async (item: IHowto) => {
step.text,
'',
// Add step images if any using Astro's Image component
...step.images.map(img => `\n<Image src={import('./${img.name}')} alt="${img.name}" />\n`)
...step.images.map(img => `\n<Image src={import('./${sanitizeFilename(img.name)}')} alt="${img.name}" />\n`)
].join('\n'))
].filter(Boolean).join('\n')
write(path.join(itemDir, 'index.mdx'), mdxContent)
@ -337,7 +337,7 @@ const complete = async (item: IHowto) => {
}
await to_github(item)
await to_mdx(item)
await to_astro(item)
// await to_astro(item)
return item
}

19
temp/.kbot/params.json Normal file
View File

@ -0,0 +1,19 @@
{
"model": "perplexity/sonar-deep-research",
"messages": [
{
"role": "user",
"content": "Return a list of useful references (only with links), as Markdown, grouped : Articles, Books, Papers, Youtube, Opensource Designs, ... Dont comment !"
},
{
"role": "user",
"content": "USER Preferences : # Personal Preferences Configuration\n\n## Personal Information\n\n| Category | Value |\n| --------- | ----- |\n| Gender | Male |\n| Location | Sentmenat, Barcelona, Spain |\n| Age | 45+ |\n| Occupation | Software Developer (Typescript) |\n| Languages | German, prefers English |\n\n## Contact Information\n\n| Contact | Email |\n| ------- | ----- |\n| My Email | cgoflyn@gmail.com |\n| Wife's Email (Anne) | barbier.anne13@gmail.com |\n\n## Content Preferences\n\n- Content Formatting:\n - Always use Markdown\n - Always add new lines after headings\n - Always add links to sources\n - Always include the prompt in the result\n\n- Email Preferences:\n - Always add \"kind regards, Guenter\" as signature\n - When sending emails to Anne, always use French\n\n- News Search Preferences:\n - Always add links to videos\n - Search via Google and other news outlets\n\n- Development Preferences:\n - No need to test file for existence\n - Prefer modify_project_files tool over write_file when possible\n"
},
{
"role": "user",
"path": "research-test.md",
"content": "# SKATE RAILS: how 2 make / use recycled skate rails\r\n![SKATE RAILS: how 2 make / use recycled skate rails](IMG_4253.jpg)\r\nDeck rails have been utilized by skateboarders since the 1980s to (1) enhance the ability of boards to slide on handrails, coping, curbs, etc., and (2) protect board graphics. These rails excel in both aspects, while additionally offering the unique feature of being crafted from 100% post-consumer waste.\r\n\r\nUser Location: Los Angeles, United States of America (the)\r\n## Steps\r\n### Step 1: Order / Make the Mold\r\n\r\nYou may acquire my mold or its design from selected online platforms or create a version yourself. \r\n\r\nFor purchases made through my website related to these items, I contribute 5% of the sales to a designated cause.\r\n\r\n[Visit my website](https://skatehyena.com/)\r\n\r\n\r\n![mold screenshot.jpg](./mold_screenshot.jpg)\r\n\r\n\r\n![IMG_5848 copy.jpg](./IMG_5848_copy.jpg)\r\n\r\n### Step 2: Having the Mold Made!\r\n\r\nIf you purchase my mold, it will arrive in approximately 4 weeks (28 days).\r\n\r\nIf you acquire my mold design or create your own design, you will receive the digital file; however, the mold will still need to be fabricated. You have two options:\r\n- Fabricate it yourself.\r\n- Send the file to a professional to fabricate the mold:\r\n - Your local CNC machinist.\r\n - The closest mold maker available to you.\r\n\r\n\r\n![IMG_07.JPG](./IMG_07.JPG)\r\n\r\n### Step 3: Reycled Used Plastic\r\n\r\nCollect used plastic for shredding or purchase pre-shredded plastic:\r\n\r\n(I have found that type #2 HDPE works well for durability and board sliding. I am interested in discovering if other types of plastic are more effective for others.)\r\n\r\n\r\n![shredban2.jpg](./shredban2.jpg)\r\n\r\n### Step 4: Get Injection Machine\r\n\r\n### Buy or Build an Injection Machine\r\n\r\n[Link Removed]\r\n\r\nExplore the option of purchasing or constructing an injection machine, which can be utilized for various projects. Although an extruder might be more suitable for certain products, it may be cost-prohibitive. Therefore, the V3 injection machine is a viable alternative for those on a budget. Feedback is welcome from anyone with experience using an extruder for similar purposes.\r\n\r\n\r\n![IMG_3743 copy.jpg](./IMG_3743_copy.jpg)\r\n\r\n### Step 5: Plastic Education!\r\n\r\nLearn how to use your new injection machine and mold and get insight into plastics (link below). For any inquiries, please email at [email address].\r\n\r\n[Link Removed]\r\n\r\n\r\n![Precious-Plastic-Logo.png](./Precious-Plastic-Logo.png)\r\n\r\n### Step 6: Inject!\r\n\r\nI have been utilizing an injection machine equipped with a car jack, as the mold's width prevents it from fully attaching to the machine. The rail mold requires approximately 80 grams (2.8 ounces) of molten plastic, though this may vary based on the plastic type. Consequently, about 80% of the filled machine's plastic is used. Additionally, I preheat the mold for 15 minutes at 250°F (121°C) to ensure a smoother flow of molten plastic."
}
],
"tools": []
}

View File

@ -0,0 +1,16 @@
```markdown
## Articles
- [SKATE RAILS: how 2 make / use recycled skate rails](https://community.preciousplastic.com/library/skate-rails-how-2-make--use-recycled-skate-rails)
- [Recycled Plastic Skateboard Decks Demonstrate Small-Scale Injection Molding](https://hackaday.com/2022/10/21/hackaday-prize-2022-recycled-plastic-skateboard-decks-demonstrate-small-scale-injection-molding/)
- [HOW TO MAKE AND USE 100% RECYCLED SKATEBOARD RAILS](https://community.preciousplastic.com/library/how-to-make-and-use-100-recycled-skateboard-rails)
- [Recycled Fishing Nets into Perforated Skateboards](https://www.designboom.com/design/lander-recycles-ocean-fishing-nets-quirky-perforated-skateboards-02-15-2023/)
## Books
- [Secrets of Building a Plastic Injection Molding Machine](https://www.goodreads.com/book/show/1351973.Secrets_of_Building_a_Plastic_Injection_Molding_Machine)
## YouTube
- [Designing My Own Deck Shape! The Perfect Hybrid Board?](https://www.youtube.com/watch?v=JAvn9CULJRE)
## Opensource Designs
- [Automatic Injection Molding Machine Design](https://community.preciousplastic.com/library/automatic-injection-molding-machine)
```

65
temp/research-test.md Normal file
View File

@ -0,0 +1,65 @@
# SKATE RAILS: how 2 make / use recycled skate rails
![SKATE RAILS: how 2 make / use recycled skate rails](IMG_4253.jpg)
Deck rails have been utilized by skateboarders since the 1980s to (1) enhance the ability of boards to slide on handrails, coping, curbs, etc., and (2) protect board graphics. These rails excel in both aspects, while additionally offering the unique feature of being crafted from 100% post-consumer waste.
User Location: Los Angeles, United States of America (the)
## Steps
### Step 1: Order / Make the Mold
You may acquire my mold or its design from selected online platforms or create a version yourself.
For purchases made through my website related to these items, I contribute 5% of the sales to a designated cause.
[Visit my website](https://skatehyena.com/)
![mold screenshot.jpg](./mold_screenshot.jpg)
![IMG_5848 copy.jpg](./IMG_5848_copy.jpg)
### Step 2: Having the Mold Made!
If you purchase my mold, it will arrive in approximately 4 weeks (28 days).
If you acquire my mold design or create your own design, you will receive the digital file; however, the mold will still need to be fabricated. You have two options:
- Fabricate it yourself.
- Send the file to a professional to fabricate the mold:
- Your local CNC machinist.
- The closest mold maker available to you.
![IMG_07.JPG](./IMG_07.JPG)
### Step 3: Reycled Used Plastic
Collect used plastic for shredding or purchase pre-shredded plastic:
(I have found that type #2 HDPE works well for durability and board sliding. I am interested in discovering if other types of plastic are more effective for others.)
![shredban2.jpg](./shredban2.jpg)
### Step 4: Get Injection Machine
### Buy or Build an Injection Machine
[Link Removed]
Explore the option of purchasing or constructing an injection machine, which can be utilized for various projects. Although an extruder might be more suitable for certain products, it may be cost-prohibitive. Therefore, the V3 injection machine is a viable alternative for those on a budget. Feedback is welcome from anyone with experience using an extruder for similar purposes.
![IMG_3743 copy.jpg](./IMG_3743_copy.jpg)
### Step 5: Plastic Education!
Learn how to use your new injection machine and mold and get insight into plastics (link below). For any inquiries, please email at [email address].
[Link Removed]
![Precious-Plastic-Logo.png](./Precious-Plastic-Logo.png)
### Step 6: Inject!
I have been utilizing an injection machine equipped with a car jack, as the mold's width prevents it from fully attaching to the machine. The rail mold requires approximately 80 grams (2.8 ounces) of molten plastic, though this may vary based on the plastic type. Consequently, about 80% of the filled machine's plastic is used. Additionally, I preheat the mold for 15 minutes at 250°F (121°C) to ensure a smoother flow of molten plastic.

Binary file not shown.

Before

Width:  |  Height:  |  Size: 403 KiB

8
vitest.config.ts Normal file
View File

@ -0,0 +1,8 @@
import { defineConfig } from 'vitest/config';
export default defineConfig({
test: {
include: ['src/**/*.{test,spec}.{js,mjs,cjs,ts,mts,cts,jsx,tsx}'],
environment: 'node',
},
});