feat: Init with clean layout
This commit is contained in:
21
.gitignore
vendored
Normal file
21
.gitignore
vendored
Normal file
@@ -0,0 +1,21 @@
|
|||||||
|
# Hugo build output
|
||||||
|
public/
|
||||||
|
resources/_gen/
|
||||||
|
|
||||||
|
# Hugo lock file
|
||||||
|
.hugo_build.lock
|
||||||
|
|
||||||
|
# OS files
|
||||||
|
.DS_Store
|
||||||
|
Thumbs.db
|
||||||
|
|
||||||
|
# Editor files
|
||||||
|
*.swp
|
||||||
|
*.swo
|
||||||
|
*~
|
||||||
|
.idea/
|
||||||
|
.vscode/
|
||||||
|
|
||||||
|
# Environment files
|
||||||
|
.env
|
||||||
|
.env.local
|
||||||
532
CUSTOMIZATION.md
Normal file
532
CUSTOMIZATION.md
Normal file
@@ -0,0 +1,532 @@
|
|||||||
|
# Hugo + PaperMod Customization Guide
|
||||||
|
|
||||||
|
This guide covers how to customize your Hugo portfolio site using the PaperMod theme.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Table of Contents
|
||||||
|
|
||||||
|
1. [Project Structure](#project-structure)
|
||||||
|
2. [Development Workflow](#development-workflow)
|
||||||
|
3. [Configuration (hugo.yaml)](#configuration-hugoyaml)
|
||||||
|
4. [Adding Content](#adding-content)
|
||||||
|
5. [Creating New Sections](#creating-new-sections)
|
||||||
|
6. [Customizing Styles (CSS)](#customizing-styles-css)
|
||||||
|
7. [Overriding Layouts](#overriding-layouts)
|
||||||
|
8. [Common Customizations](#common-customizations)
|
||||||
|
9. [Deployment](#deployment)
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Project Structure
|
||||||
|
|
||||||
|
```
|
||||||
|
MyPortfolio/
|
||||||
|
├── archetypes/ # Templates for new content
|
||||||
|
├── assets/
|
||||||
|
│ └── css/
|
||||||
|
│ └── extended/
|
||||||
|
│ └── custom.css # YOUR custom CSS (this gets merged)
|
||||||
|
├── content/
|
||||||
|
│ ├── posts/ # Long-form articles
|
||||||
|
│ │ └── _index.md # Section config
|
||||||
|
│ ├── notes/ # Short notes/TILs
|
||||||
|
│ │ └── _index.md # Section config
|
||||||
|
│ └── search.md # Search page
|
||||||
|
├── layouts/
|
||||||
|
│ ├── partials/ # Override theme partials
|
||||||
|
│ │ └── footer.html # Custom footer
|
||||||
|
│ └── notes/ # Section-specific layouts
|
||||||
|
│ └── list.html # Custom notes list
|
||||||
|
├── static/
|
||||||
|
│ └── files/ # Static files (CV.pdf, images, etc.)
|
||||||
|
├── themes/
|
||||||
|
│ └── PaperMod/ # Theme (git submodule - DON'T edit)
|
||||||
|
├── hugo.yaml # Main configuration
|
||||||
|
└── .gitignore # Ignores public/, etc.
|
||||||
|
```
|
||||||
|
|
||||||
|
### Key Principle: Never Edit the Theme Directly
|
||||||
|
|
||||||
|
The `themes/PaperMod/` folder is a git submodule. To customize:
|
||||||
|
- **CSS**: Add to `assets/css/extended/custom.css`
|
||||||
|
- **Layouts**: Copy the file from `themes/PaperMod/layouts/` to `layouts/` and modify
|
||||||
|
- **Config**: Everything in `hugo.yaml`
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Development Workflow
|
||||||
|
|
||||||
|
### Local Development
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Start dev server (watches for changes)
|
||||||
|
hugo serve
|
||||||
|
|
||||||
|
# With drafts visible
|
||||||
|
hugo serve -D
|
||||||
|
|
||||||
|
# Build for production (outputs to public/)
|
||||||
|
hugo build --minify
|
||||||
|
```
|
||||||
|
|
||||||
|
### Why `public/` is Gitignored
|
||||||
|
|
||||||
|
- `public/` is generated output - it's rebuilt fresh every time
|
||||||
|
- Your CI/CD (GitHub Actions) builds it during deployment
|
||||||
|
- Never commit build artifacts to git
|
||||||
|
|
||||||
|
### Git Workflow
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# After making changes
|
||||||
|
git add .
|
||||||
|
git commit -m "Add new post about X"
|
||||||
|
git push origin master # Triggers deployment
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Configuration (hugo.yaml)
|
||||||
|
|
||||||
|
### Key Sections
|
||||||
|
|
||||||
|
#### Site Basics
|
||||||
|
```yaml
|
||||||
|
baseURL: "/" # Use "/" for relative URLs (works on localhost + prod)
|
||||||
|
relativeURLs: true # Makes all URLs relative
|
||||||
|
title: Saurav Dhakal
|
||||||
|
languageCode: en-us
|
||||||
|
theme: ["PaperMod"]
|
||||||
|
```
|
||||||
|
|
||||||
|
#### Menu (Header Navigation)
|
||||||
|
```yaml
|
||||||
|
menu:
|
||||||
|
main:
|
||||||
|
- identifier: posts # Internal ID
|
||||||
|
name: Posts # Display name
|
||||||
|
url: /posts/ # URL path
|
||||||
|
weight: 10 # Order (lower = first)
|
||||||
|
- identifier: notes
|
||||||
|
name: Notes
|
||||||
|
url: /notes/
|
||||||
|
weight: 20
|
||||||
|
- identifier: tags
|
||||||
|
name: Tags
|
||||||
|
url: /tags/
|
||||||
|
weight: 30
|
||||||
|
- identifier: search
|
||||||
|
name: Search
|
||||||
|
url: /search/
|
||||||
|
weight: 40
|
||||||
|
```
|
||||||
|
|
||||||
|
#### Home Page Info
|
||||||
|
```yaml
|
||||||
|
params:
|
||||||
|
homeInfoParams:
|
||||||
|
Title: "Hi there 👋, I'm Saurav!"
|
||||||
|
Content: >
|
||||||
|
I'm a software engineer...
|
||||||
|
```
|
||||||
|
|
||||||
|
#### Social Icons
|
||||||
|
```yaml
|
||||||
|
params:
|
||||||
|
socialIcons:
|
||||||
|
- name: github
|
||||||
|
url: "https://github.com/yourusername"
|
||||||
|
- name: linkedin
|
||||||
|
url: "https://linkedin.com/in/yourusername"
|
||||||
|
- name: x
|
||||||
|
url: "https://x.com/yourusername"
|
||||||
|
```
|
||||||
|
|
||||||
|
Available icons: github, linkedin, x, twitter, email, rss, youtube, instagram, facebook, stackoverflow, etc.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Adding Content
|
||||||
|
|
||||||
|
### New Post
|
||||||
|
|
||||||
|
```bash
|
||||||
|
hugo new posts/my-new-post.md
|
||||||
|
```
|
||||||
|
|
||||||
|
Or manually create `content/posts/my-new-post.md`:
|
||||||
|
|
||||||
|
```markdown
|
||||||
|
---
|
||||||
|
title: "My New Post"
|
||||||
|
date: 2025-08-20
|
||||||
|
summary: "A brief description for the list view"
|
||||||
|
tags: ["tag1", "tag2"]
|
||||||
|
categories: ["Category"]
|
||||||
|
draft: false
|
||||||
|
ShowToc: true
|
||||||
|
TocOpen: false
|
||||||
|
---
|
||||||
|
|
||||||
|
Your content here...
|
||||||
|
```
|
||||||
|
|
||||||
|
### New Note
|
||||||
|
|
||||||
|
Create `content/notes/my-note.md`:
|
||||||
|
|
||||||
|
```markdown
|
||||||
|
---
|
||||||
|
title: "Quick TIL"
|
||||||
|
date: 2025-08-20
|
||||||
|
summary: "Today I learned about X"
|
||||||
|
tags: ["til"]
|
||||||
|
---
|
||||||
|
|
||||||
|
Short content here...
|
||||||
|
```
|
||||||
|
|
||||||
|
### Front Matter Options
|
||||||
|
|
||||||
|
| Field | Description |
|
||||||
|
|-------|-------------|
|
||||||
|
| `title` | Post title |
|
||||||
|
| `date` | Publication date (YYYY-MM-DD) |
|
||||||
|
| `summary` | Short description for list views |
|
||||||
|
| `tags` | Array of tags |
|
||||||
|
| `categories` | Array of categories |
|
||||||
|
| `draft` | If `true`, won't be published |
|
||||||
|
| `ShowToc` | Show table of contents |
|
||||||
|
| `TocOpen` | TOC expanded by default |
|
||||||
|
| `ShowReadingTime` | Override global setting |
|
||||||
|
| `ShowWordCount` | Override global setting |
|
||||||
|
| `cover.image` | Cover image path |
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Creating New Sections
|
||||||
|
|
||||||
|
### Example: Adding a "Projects" Section
|
||||||
|
|
||||||
|
1. **Add to menu** in `hugo.yaml`:
|
||||||
|
```yaml
|
||||||
|
menu:
|
||||||
|
main:
|
||||||
|
# ... existing items
|
||||||
|
- identifier: projects
|
||||||
|
name: Projects
|
||||||
|
url: /projects/
|
||||||
|
weight: 25
|
||||||
|
```
|
||||||
|
|
||||||
|
2. **Create content directory**:
|
||||||
|
```bash
|
||||||
|
mkdir -p content/projects
|
||||||
|
```
|
||||||
|
|
||||||
|
3. **Create section index** `content/projects/_index.md`:
|
||||||
|
```markdown
|
||||||
|
---
|
||||||
|
title: "Projects"
|
||||||
|
description: "Things I've built"
|
||||||
|
---
|
||||||
|
```
|
||||||
|
|
||||||
|
4. **Add project pages** `content/projects/my-project.md`:
|
||||||
|
```markdown
|
||||||
|
---
|
||||||
|
title: "My Cool Project"
|
||||||
|
date: 2025-01-15
|
||||||
|
summary: "A brief description"
|
||||||
|
tags: ["golang", "cli"]
|
||||||
|
---
|
||||||
|
|
||||||
|
Project description...
|
||||||
|
```
|
||||||
|
|
||||||
|
5. **(Optional) Custom layout** - If you want projects to look different, create `layouts/projects/list.html`
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Customizing Styles (CSS)
|
||||||
|
|
||||||
|
### Where to Add CSS
|
||||||
|
|
||||||
|
**Only edit**: `assets/css/extended/custom.css`
|
||||||
|
|
||||||
|
PaperMod automatically includes this file. You don't need to import it anywhere.
|
||||||
|
|
||||||
|
### CSS Variables (Theme Colors)
|
||||||
|
|
||||||
|
PaperMod uses CSS variables. Override them in your custom.css:
|
||||||
|
|
||||||
|
```css
|
||||||
|
:root {
|
||||||
|
/* Light mode */
|
||||||
|
--primary: #282828; /* Main text */
|
||||||
|
--secondary: #3c3836; /* Secondary text */
|
||||||
|
--tertiary: rgb(214, 214, 214); /* Borders, etc */
|
||||||
|
--theme: rgb(255, 255, 255); /* Background */
|
||||||
|
--entry: rgb(255, 255, 255); /* Card background */
|
||||||
|
}
|
||||||
|
|
||||||
|
:root[data-theme="dark"] {
|
||||||
|
/* Dark mode */
|
||||||
|
--primary: #fbf1c7;
|
||||||
|
--secondary: #ebdbb2;
|
||||||
|
--theme: #181818;
|
||||||
|
--entry: rgb(46, 46, 51);
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
### Common CSS Customizations
|
||||||
|
|
||||||
|
#### Change fonts
|
||||||
|
```css
|
||||||
|
@import url("https://fonts.googleapis.com/css2?family=Your+Font&display=swap");
|
||||||
|
|
||||||
|
body {
|
||||||
|
font-family: "Your Font", sans-serif;
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
#### Style links
|
||||||
|
```css
|
||||||
|
main a {
|
||||||
|
text-decoration: underline;
|
||||||
|
text-decoration-color: var(--green);
|
||||||
|
}
|
||||||
|
|
||||||
|
main a:hover {
|
||||||
|
background-color: var(--green);
|
||||||
|
color: white;
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
#### Customize post cards
|
||||||
|
```css
|
||||||
|
main .post-entry {
|
||||||
|
border: 2px solid #383838;
|
||||||
|
background-color: var(--entry);
|
||||||
|
border-radius: 8px;
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Overriding Layouts
|
||||||
|
|
||||||
|
### How Layout Override Works
|
||||||
|
|
||||||
|
Hugo looks for templates in this order:
|
||||||
|
1. `layouts/` (your overrides)
|
||||||
|
2. `themes/PaperMod/layouts/` (theme defaults)
|
||||||
|
|
||||||
|
### To Override a Template
|
||||||
|
|
||||||
|
1. Find the file in `themes/PaperMod/layouts/`
|
||||||
|
2. Copy it to the same path in `layouts/`
|
||||||
|
3. Modify your copy
|
||||||
|
|
||||||
|
### Common Files to Override
|
||||||
|
|
||||||
|
| File | Purpose |
|
||||||
|
|------|---------|
|
||||||
|
| `layouts/partials/header.html` | Site header/nav |
|
||||||
|
| `layouts/partials/footer.html` | Site footer |
|
||||||
|
| `layouts/partials/post_meta.html` | Post metadata (date, read time) |
|
||||||
|
| `layouts/_default/list.html` | List pages (posts, tags) |
|
||||||
|
| `layouts/_default/single.html` | Individual post/page |
|
||||||
|
|
||||||
|
### Example: Simpler Footer
|
||||||
|
|
||||||
|
Your `layouts/partials/footer.html` already overrides the theme's footer.
|
||||||
|
|
||||||
|
### Section-Specific Layouts
|
||||||
|
|
||||||
|
Create `layouts/SECTION_NAME/list.html` for a custom list layout for that section.
|
||||||
|
|
||||||
|
Example: `layouts/notes/list.html` - custom compact layout for notes.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Common Customizations
|
||||||
|
|
||||||
|
### Disable Reading Time for a Section
|
||||||
|
|
||||||
|
In the section's `_index.md`:
|
||||||
|
```markdown
|
||||||
|
---
|
||||||
|
title: "Notes"
|
||||||
|
ShowReadingTime: false
|
||||||
|
---
|
||||||
|
```
|
||||||
|
|
||||||
|
Or per-post in front matter.
|
||||||
|
|
||||||
|
### Add a Static Page (About, Contact)
|
||||||
|
|
||||||
|
Create `content/about.md`:
|
||||||
|
```markdown
|
||||||
|
---
|
||||||
|
title: "About"
|
||||||
|
layout: "single"
|
||||||
|
url: "/about/"
|
||||||
|
---
|
||||||
|
|
||||||
|
About me content...
|
||||||
|
```
|
||||||
|
|
||||||
|
Add to menu:
|
||||||
|
```yaml
|
||||||
|
menu:
|
||||||
|
main:
|
||||||
|
- identifier: about
|
||||||
|
name: About
|
||||||
|
url: /about/
|
||||||
|
weight: 50
|
||||||
|
```
|
||||||
|
|
||||||
|
### Add Favicon
|
||||||
|
|
||||||
|
1. Place favicon files in `static/`:
|
||||||
|
- `static/favicon.ico`
|
||||||
|
- `static/favicon-16x16.png`
|
||||||
|
- `static/favicon-32x32.png`
|
||||||
|
- `static/apple-touch-icon.png`
|
||||||
|
|
||||||
|
2. Update `hugo.yaml`:
|
||||||
|
```yaml
|
||||||
|
params:
|
||||||
|
assets:
|
||||||
|
favicon: "/favicon.ico"
|
||||||
|
favicon16x16: "/favicon-16x16.png"
|
||||||
|
favicon32x32: "/favicon-32x32.png"
|
||||||
|
apple_touch_icon: "/apple-touch-icon.png"
|
||||||
|
```
|
||||||
|
|
||||||
|
### Enable Comments (Disqus)
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
params:
|
||||||
|
comments: true
|
||||||
|
|
||||||
|
disqusShortname: "your-disqus-shortname"
|
||||||
|
```
|
||||||
|
|
||||||
|
### Add Google Analytics
|
||||||
|
|
||||||
|
Already configured in your `hugo.yaml`:
|
||||||
|
```yaml
|
||||||
|
googleAnalytics: "G-XXXXXXXXXX"
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Deployment
|
||||||
|
|
||||||
|
### Current Setup (GitHub Actions → SSH/SCP)
|
||||||
|
|
||||||
|
Your `.github/workflows/deploy.yml`:
|
||||||
|
1. Triggers on push to `master`
|
||||||
|
2. Builds site with `hugo build --minify`
|
||||||
|
3. Deploys `public/` via SCP to your server
|
||||||
|
|
||||||
|
### Required GitHub Secrets
|
||||||
|
|
||||||
|
Set these in your repo's Settings → Secrets:
|
||||||
|
- `SSH_HOST` - Your server hostname/IP
|
||||||
|
- `SSH_USER` - SSH username
|
||||||
|
- `SSH_KEY` - Private SSH key
|
||||||
|
- `SSH_PORT` - SSH port (usually 22)
|
||||||
|
|
||||||
|
### Alternative: GitHub Pages
|
||||||
|
|
||||||
|
If you want to use GitHub Pages instead:
|
||||||
|
|
||||||
|
1. Change workflow to use `peaceiris/actions-gh-pages`
|
||||||
|
2. Set `baseURL` to `https://yourusername.github.io/repo-name/`
|
||||||
|
|
||||||
|
### Alternative: Netlify/Vercel
|
||||||
|
|
||||||
|
These platforms auto-detect Hugo and build for you:
|
||||||
|
1. Connect your GitHub repo
|
||||||
|
2. Set build command: `hugo --minify`
|
||||||
|
3. Set publish directory: `public`
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Quick Reference
|
||||||
|
|
||||||
|
### Useful Commands
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Local dev
|
||||||
|
hugo serve -D # Serve with drafts
|
||||||
|
|
||||||
|
# Create content
|
||||||
|
hugo new posts/title.md # New post
|
||||||
|
hugo new notes/title.md # New note
|
||||||
|
|
||||||
|
# Build
|
||||||
|
hugo build --minify # Production build
|
||||||
|
|
||||||
|
# Debug
|
||||||
|
hugo config # Show full config
|
||||||
|
hugo list all # List all content
|
||||||
|
```
|
||||||
|
|
||||||
|
### File Locations
|
||||||
|
|
||||||
|
| What | Where |
|
||||||
|
|------|-------|
|
||||||
|
| Config | `hugo.yaml` |
|
||||||
|
| Custom CSS | `assets/css/extended/custom.css` |
|
||||||
|
| Posts | `content/posts/` |
|
||||||
|
| Notes | `content/notes/` |
|
||||||
|
| Static files | `static/` |
|
||||||
|
| Layout overrides | `layouts/` |
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Troubleshooting
|
||||||
|
|
||||||
|
### Links Go to Production URL in Dev
|
||||||
|
|
||||||
|
Fixed by setting:
|
||||||
|
```yaml
|
||||||
|
baseURL: "/"
|
||||||
|
relativeURLs: true
|
||||||
|
```
|
||||||
|
|
||||||
|
### Changes Not Showing
|
||||||
|
|
||||||
|
1. Hard refresh browser (Ctrl+Shift+R)
|
||||||
|
2. Clear `public/` folder: `rm -rf public/`
|
||||||
|
3. Restart hugo serve
|
||||||
|
|
||||||
|
### Theme Not Loading
|
||||||
|
|
||||||
|
```bash
|
||||||
|
git submodule update --init --recursive
|
||||||
|
```
|
||||||
|
|
||||||
|
### Search Not Working
|
||||||
|
|
||||||
|
Ensure `hugo.yaml` has:
|
||||||
|
```yaml
|
||||||
|
outputs:
|
||||||
|
home:
|
||||||
|
- HTML
|
||||||
|
- RSS
|
||||||
|
- JSON # Required for search
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Resources
|
||||||
|
|
||||||
|
- [Hugo Documentation](https://gohugo.io/documentation/)
|
||||||
|
- [PaperMod Wiki](https://github.com/adityatelange/hugo-PaperMod/wiki)
|
||||||
|
- [PaperMod Demo](https://adityatelange.github.io/hugo-PaperMod/)
|
||||||
@@ -66,7 +66,7 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
body {
|
body {
|
||||||
font-family: "Space Grotesk", sans-serif;
|
font-family: "Space Grotesk", monospace;
|
||||||
}
|
}
|
||||||
|
|
||||||
nav #menu span {
|
nav #menu span {
|
||||||
@@ -139,3 +139,54 @@ main .post-entry {
|
|||||||
color: var(--post-entry-fg);
|
color: var(--post-entry-fg);
|
||||||
border: 2px solid #383838;
|
border: 2px solid #383838;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* *
|
||||||
|
* NOTES SECTION - Compact list style
|
||||||
|
* */
|
||||||
|
.notes-list {
|
||||||
|
list-style: none;
|
||||||
|
padding: 0;
|
||||||
|
margin: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.note-item {
|
||||||
|
padding: 12px 0;
|
||||||
|
border-bottom: 1px solid var(--tertiary);
|
||||||
|
}
|
||||||
|
|
||||||
|
.note-item:last-child {
|
||||||
|
border-bottom: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.note-item a {
|
||||||
|
display: flex;
|
||||||
|
justify-content: space-between;
|
||||||
|
align-items: baseline;
|
||||||
|
text-decoration: none;
|
||||||
|
gap: 16px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.note-item a:hover .note-title {
|
||||||
|
text-decoration: underline;
|
||||||
|
text-decoration-color: var(--green);
|
||||||
|
text-decoration-thickness: 2px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.note-title {
|
||||||
|
font-size: 1.1rem;
|
||||||
|
font-weight: 500;
|
||||||
|
color: var(--primary);
|
||||||
|
}
|
||||||
|
|
||||||
|
.note-date {
|
||||||
|
font-size: 0.85rem;
|
||||||
|
color: var(--secondary);
|
||||||
|
white-space: nowrap;
|
||||||
|
}
|
||||||
|
|
||||||
|
.note-summary {
|
||||||
|
margin: 4px 0 0 0;
|
||||||
|
font-size: 0.9rem;
|
||||||
|
color: var(--secondary);
|
||||||
|
line-height: 1.4;
|
||||||
|
}
|
||||||
|
|||||||
4
content/notes/_index.md
Normal file
4
content/notes/_index.md
Normal file
@@ -0,0 +1,4 @@
|
|||||||
|
---
|
||||||
|
title: "Notes"
|
||||||
|
description: "Quick notes, TILs, and short thoughts"
|
||||||
|
---
|
||||||
@@ -1,8 +1,11 @@
|
|||||||
---
|
---
|
||||||
title: "Search" # in any language you want
|
title: "Sample Note"
|
||||||
layout: "search" # necessary for search
|
date: 2025-08-20
|
||||||
# url: "/archive"
|
# summary: "This is a sample note to demonstrate the notes section"
|
||||||
# description: "Description for Search"
|
tags: ["example"]
|
||||||
summary: "search"
|
draft: false
|
||||||
placeholder: "placeholder text in search input box"
|
|
||||||
---
|
---
|
||||||
|
|
||||||
|
This is a sample note. Notes are meant to be short, quick thoughts or TILs (Today I Learned).
|
||||||
|
|
||||||
|
Delete this file and add your own notes here!
|
||||||
|
|||||||
4
content/posts/_index.md
Normal file
4
content/posts/_index.md
Normal file
@@ -0,0 +1,4 @@
|
|||||||
|
---
|
||||||
|
title: "Posts"
|
||||||
|
description: "Long-form articles on software development, architecture, and engineering"
|
||||||
|
---
|
||||||
@@ -1,141 +0,0 @@
|
|||||||
---
|
|
||||||
author: ["Saurav Dhakal"]
|
|
||||||
title: "Understanding Separation of Concerns (SoC) in NestJS"
|
|
||||||
date: "2025-08-19"
|
|
||||||
summary: "A guide to understanding Separation of Concerns in NestJS using modules, services, and controllers."
|
|
||||||
tags: ["nestjs", "typescript", "architecture"]
|
|
||||||
categories: ["Backend Development", "NestJS"]
|
|
||||||
series: ["NestJS"]
|
|
||||||
ShowToc: true
|
|
||||||
TocOpen: false
|
|
||||||
---
|
|
||||||
|
|
||||||
When building applications, one of the most important design principles to keep in mind is **Separation of Concerns (SoC)**. NestJS, with its modular architecture, makes applying SoC almost effortless — but understanding _why_ it matters and _how_ to use it properly will help you write cleaner, testable, and future-proof code.
|
|
||||||
|
|
||||||
## What is Separation of Concerns and Why it Matters?
|
|
||||||
|
|
||||||
The basic idea is:
|
|
||||||
|
|
||||||
> A program should be divided into distinct sections, where each section addresses a single responsibility.
|
|
||||||
|
|
||||||
In simpler terms:
|
|
||||||
|
|
||||||
- Every part of the code should have **one clear job**.
|
|
||||||
- This makes the code easier to **understand, test, and maintain**.
|
|
||||||
|
|
||||||
Lets take an analogy of a coffee shop to better understand this concept. A coffee shop has multiple employees with distinct roles:
|
|
||||||
|
|
||||||
- The **cashier** handles payments.
|
|
||||||
- The **barista** makes coffee.
|
|
||||||
- The **inventory manager** tracks beans and supplies.
|
|
||||||
|
|
||||||
If one person did everything, the system would collapse into chaos. The same goes for software. Each role has a single responsibility, and no one does everything.
|
|
||||||
|
|
||||||
Suppose you’re building an **eCommerce platform**. Without SoC, all the logic might end up in one massive file — authentication, product catalog, payments, inventory, order processing. This quickly becomes **spaghetti code**: hard to read, impossible to test, and dangerous to modify.
|
|
||||||
|
|
||||||
With **Separation of Concerns**, you break it down into modules:
|
|
||||||
|
|
||||||
- **Auth Module** → Handles user registration, login, JWT tokens.
|
|
||||||
- **Products Module** → Manages product catalog and search.
|
|
||||||
- **Checkout Module** → Orchestrates payment and order creation.
|
|
||||||
- **Inventory Module** → Keeps track of stock levels.
|
|
||||||
|
|
||||||
Each module **does one thing**. When you need to upgrade your payment provider or switch databases, you only touch the **Checkout Module** or **Inventory Module** — everything else continues to work.
|
|
||||||
|
|
||||||
This approach of programming enhances:
|
|
||||||
|
|
||||||
- **Readability:** Developers can understand a piece of code without knowing the whole system.
|
|
||||||
- **Maintainability:** Changing one part (like authentication) won’t break unrelated features.
|
|
||||||
- **Testability:** Smaller, focused components are easier to test in isolation.
|
|
||||||
- **Flexibility:** You can swap implementations (e.g., switch databases or auth providers) without rewriting the whole app.
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## Separation of Concerns in NestJS
|
|
||||||
|
|
||||||
One of the reasons developers love NestJS is that it **bakes Separation of Concerns into its architecture**. By default, NestJS applications are structured around three core building blocks: **modules, services, and controllers**. Each of these naturally maps to a specific concern.
|
|
||||||
|
|
||||||
### 1. **Modules** → Group related functionality
|
|
||||||
|
|
||||||
- A module acts like a **container** for a specific domain or feature.
|
|
||||||
- Examples: `UsersModule`, `AuthModule`, `PostsModule`.
|
|
||||||
- A module owns everything related to its concern and can expose services for other modules to use.
|
|
||||||
|
|
||||||
Think of modules as **departments in a company** — each department specializes in one thing but can collaborate with others when needed.
|
|
||||||
|
|
||||||
### 2. **Services** → Handle business logic
|
|
||||||
|
|
||||||
- Services handle the actual “work” of the application.
|
|
||||||
- Example: `UsersService` deals only with user data.
|
|
||||||
- Example: `AuthService` deals only with authentication and tokens.
|
|
||||||
- Services should **not depend on controllers** or contain HTTP logic.
|
|
||||||
|
|
||||||
This makes them **reusable**. A service can be used in REST controllers, GraphQL resolvers, or even a CLI command without modification.
|
|
||||||
|
|
||||||
### 3. **Controllers** → Handle HTTP requests
|
|
||||||
|
|
||||||
- Controllers act as the **entry point** for requests.
|
|
||||||
- Their job is to **receive a request, delegate the work to a service, and return a response**.
|
|
||||||
- They should remain thin, containing no business logic.
|
|
||||||
|
|
||||||
This ensures controllers are simple and services stay focused.
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## Example: Auth and Users in NestJS
|
|
||||||
|
|
||||||
Let’s look at a real-world scenario: Implementing **authentication**.
|
|
||||||
|
|
||||||
### UserService in UsersModule
|
|
||||||
|
|
||||||
```tsx
|
|
||||||
@Injectable()
|
|
||||||
export class UsersService {
|
|
||||||
constructor(private prisma: PrismaService) {}
|
|
||||||
|
|
||||||
findByEmail(email: string) {
|
|
||||||
return this.prisma.user.findUnique({ where: { email } });
|
|
||||||
}
|
|
||||||
|
|
||||||
create(data: any) {
|
|
||||||
return this.prisma.user.create({ data });
|
|
||||||
}
|
|
||||||
}
|
|
||||||
```
|
|
||||||
|
|
||||||
UserService is only concerned with **managing user data**. It knows nothing about JWTs, passwords, or authentication.
|
|
||||||
|
|
||||||
### AuthService in AuthModule
|
|
||||||
|
|
||||||
```tsx
|
|
||||||
@Injectable()
|
|
||||||
export class AuthService {
|
|
||||||
constructor(
|
|
||||||
private usersService: UsersService,
|
|
||||||
private jwtService: JwtService,
|
|
||||||
) {}
|
|
||||||
|
|
||||||
async validateUser(email: string, password: string) {
|
|
||||||
const user = await this.usersService.findByEmail(email);
|
|
||||||
// validate password...
|
|
||||||
return user;
|
|
||||||
}
|
|
||||||
|
|
||||||
login(user: any) {
|
|
||||||
return { access_token: this.jwtService.sign({ sub: user.id }) };
|
|
||||||
}
|
|
||||||
}
|
|
||||||
```
|
|
||||||
|
|
||||||
AuthService handles **authentication logic**. It uses `UsersService`, to work with user data (findByEmail) but doesn’t leak authentication concerns back into it.
|
|
||||||
A clear boundary is maintained: `UsersService` manages user data, `AuthService` manages auth.
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## Conclusion
|
|
||||||
|
|
||||||
Separation of Concerns isn’t just a design principle — it’s a mindset. By keeping each part of your application focused on a single responsibility, you reduce complexity, make testing easier, and keep your codebase flexible as your project grows.
|
|
||||||
|
|
||||||
NestJS makes this natural with its **modules, services, and controllers**. If you embrace SoC from the start, you’ll end up with applications that are not only **scalable** but also a joy to maintain.
|
|
||||||
|
|
||||||
(Proofread by ChatGPT)
|
|
||||||
@@ -1,8 +1,7 @@
|
|||||||
---
|
---
|
||||||
title: "Search" # in any language you want
|
title: "Search"
|
||||||
layout: "search" # necessary for search
|
layout: "search"
|
||||||
# url: "/archive"
|
url: "/search/"
|
||||||
# description: "Description for Search"
|
summary: "Search posts and notes"
|
||||||
summary: "search"
|
placeholder: "Search..."
|
||||||
placeholder: "placeholder text in search input box"
|
|
||||||
---
|
---
|
||||||
|
|||||||
31
hugo.yaml
31
hugo.yaml
@@ -1,5 +1,5 @@
|
|||||||
# DEmo
|
baseURL: "/"
|
||||||
baseURL: "https://sauravdhakal.com.np/"
|
relativeURLs: true
|
||||||
languageCode: en-us
|
languageCode: en-us
|
||||||
title: Saurav Dhakal
|
title: Saurav Dhakal
|
||||||
theme: ["PaperMod"]
|
theme: ["PaperMod"]
|
||||||
@@ -77,14 +77,12 @@ params:
|
|||||||
|
|
||||||
# home-info mode
|
# home-info mode
|
||||||
homeInfoParams:
|
homeInfoParams:
|
||||||
Title: "Hi there \U0001F44B, I'm Saurav!"
|
Title: "Hi there \U0001F44B, I’m Saurav!"
|
||||||
Content: >
|
Content: >
|
||||||
I’m a software engineer who enjoys building thoughtful systems and learning how things really work.
|
I’m a software engineer who enjoys building thoughtful systems and learning how things really work.
|
||||||
<br />
|
<br /><br />
|
||||||
This is my digital garden - notes, projects, and lessons along the way.
|
This is my digital garden - notes, projects, and lessons along the way.
|
||||||
|
<br /><br />
|
||||||
- <br />
|
|
||||||
|
|
||||||
Checkout my [CV](files/CV.pdf) for my works and projects.
|
Checkout my [CV](files/CV.pdf) for my works and projects.
|
||||||
|
|
||||||
socialIcons:
|
socialIcons:
|
||||||
@@ -123,16 +121,27 @@ params:
|
|||||||
menu:
|
menu:
|
||||||
main:
|
main:
|
||||||
- identifier: posts
|
- identifier: posts
|
||||||
name: posts
|
name: Posts
|
||||||
url: /posts/
|
url: /posts/
|
||||||
weight: 10
|
weight: 10
|
||||||
- identifier: tags
|
- identifier: notes
|
||||||
name: tags
|
name: Notes
|
||||||
url: /tags/
|
url: /notes/
|
||||||
weight: 20
|
weight: 20
|
||||||
|
- identifier: tags
|
||||||
|
name: Tags
|
||||||
|
url: /tags/
|
||||||
|
weight: 30
|
||||||
|
- identifier: search
|
||||||
|
name: Search
|
||||||
|
url: /search/
|
||||||
|
weight: 40
|
||||||
# Read: https://github.com/adityatelange/hugo-PaperMod/wiki/FAQs#using-hugos-syntax-highlighter-chroma
|
# Read: https://github.com/adityatelange/hugo-PaperMod/wiki/FAQs#using-hugos-syntax-highlighter-chroma
|
||||||
pygmentsUseClasses: true
|
pygmentsUseClasses: true
|
||||||
markup:
|
markup:
|
||||||
|
goldmark:
|
||||||
|
renderer:
|
||||||
|
unsafe: true
|
||||||
highlight:
|
highlight:
|
||||||
noClasses: false
|
noClasses: false
|
||||||
# anchorLineNos: true
|
# anchorLineNos: true
|
||||||
|
|||||||
30
layouts/notes/list.html
Normal file
30
layouts/notes/list.html
Normal file
@@ -0,0 +1,30 @@
|
|||||||
|
{{- define "main" }}
|
||||||
|
|
||||||
|
<header class="page-header">
|
||||||
|
<h1>{{ .Title }}</h1>
|
||||||
|
{{- if .Description }}
|
||||||
|
<div class="post-description">{{ .Description }}</div>
|
||||||
|
{{- end }}
|
||||||
|
</header>
|
||||||
|
|
||||||
|
{{- $pages := .Pages }}
|
||||||
|
|
||||||
|
{{- if .Site.Params.fuseOpts }}
|
||||||
|
<div id="searchResults" class="post-list"></div>
|
||||||
|
{{- end }}
|
||||||
|
|
||||||
|
<ul class="notes-list">
|
||||||
|
{{- range $pages }}
|
||||||
|
<li class="note-item">
|
||||||
|
<a href="{{ .Permalink }}">
|
||||||
|
<span class="note-title">{{ .Title }}</span>
|
||||||
|
<span class="note-date">{{ .Date.Format "Jan 2, 2006" }}</span>
|
||||||
|
</a>
|
||||||
|
{{- if .Summary }}
|
||||||
|
<p class="note-summary">{{ .Summary | plainify | truncate 100 }}</p>
|
||||||
|
{{- end }}
|
||||||
|
</li>
|
||||||
|
{{- end }}
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
{{- end }}{{/* end main */}}
|
||||||
@@ -1,2 +1,2 @@
|
|||||||
<!doctype html><html lang=en dir=auto data-theme=dark><head><meta charset=utf-8><meta http-equiv=X-UA-Compatible content="IE=edge"><meta name=viewport content="width=device-width,initial-scale=1,shrink-to-fit=no"><meta name=robots content="index, follow"><title>404 Page not found | Saurav Dhakal</title><meta name=keywords content><meta name=description content="A personal blog"><meta name=author content="saurav"><link rel=canonical href=https://sauravdhakal.com.np/404.html><link crossorigin=anonymous href=/assets/css/stylesheet.1819d1b52fd9f2af4d88316fde3f9b918c48d08dac9a2e1ef0a7ca49d1f18ddb.css integrity="sha256-GBnRtS/Z8q9NiDFv3j+bkYxI0I2smi4e8KfKSdHxjds=" rel="preload stylesheet" as=style><link rel=icon href=https://sauravdhakal.com.np/%3Clink%20/%20abs%20url%3E><link rel=icon type=image/png sizes=16x16 href=https://sauravdhakal.com.np/%3Clink%20/%20abs%20url%3E><link rel=icon type=image/png sizes=32x32 href=https://sauravdhakal.com.np/%3Clink%20/%20abs%20url%3E><link rel=apple-touch-icon href=https://sauravdhakal.com.np/%3Clink%20/%20abs%20url%3E><link rel=mask-icon href=https://sauravdhakal.com.np/%3Clink%20/%20abs%20url%3E><meta name=theme-color content="#2e2e33"><meta name=msapplication-TileColor content="#2e2e33"><link rel=alternate hreflang=en href=https://sauravdhakal.com.np/404.html><noscript><style>#theme-toggle,.top-link{display:none}</style></noscript><script async src="https://www.googletagmanager.com/gtag/js?id=G-V0CXG8ZEG2"></script><script>var dnt,doNotTrack=!1;if(!1&&(dnt=navigator.doNotTrack||window.doNotTrack||navigator.msDoNotTrack,doNotTrack=dnt=="1"||dnt=="yes"),!doNotTrack){window.dataLayer=window.dataLayer||[];function gtag(){dataLayer.push(arguments)}gtag("js",new Date),gtag("config","G-V0CXG8ZEG2")}</script><meta property="og:url" content="https://sauravdhakal.com.np/404.html"><meta property="og:site_name" content="Saurav Dhakal"><meta property="og:title" content="404 Page not found"><meta property="og:description" content="A personal blog"><meta property="og:locale" content="en-us"><meta property="og:type" content="website"><meta name=twitter:card content="summary"><meta name=twitter:title content="404 Page not found"><meta name=twitter:description content="A personal blog"></head><body class=list id=top><header class=header><nav class=nav><div class=logo><a href=https://sauravdhakal.com.np/ accesskey=h title="SauravDhakal (Alt + H)">SauravDhakal</a><div class=logo-switches></div></div><ul id=menu><li><a href=https://sauravdhakal.com.np/posts/ title=posts><span>posts</span></a></li><li><a href=https://sauravdhakal.com.np/tags/ title=tags><span>tags</span></a></li></ul></nav></header><main class=main><div class=not-found>404</div></main><footer class=footer><span>Copyright © 2026 SauravDhakal</span></footer><a href=#top aria-label="go to top" title="Go to Top (Alt + G)" class=top-link id=top-link accesskey=g><svg viewBox="0 0 12 6" fill="currentColor"><path d="M12 6H0l6-6z"/></svg>
|
<!doctype html><html lang=en dir=auto data-theme=dark><head><script src="/livereload.js?mindelay=10&v=2&port=1313&path=livereload" data-no-instant defer></script><meta charset=utf-8><meta http-equiv=X-UA-Compatible content="IE=edge"><meta name=viewport content="width=device-width,initial-scale=1,shrink-to-fit=no"><meta name=robots content="index, follow"><title>404 Page not found | Saurav Dhakal</title><meta name=keywords content><meta name=description content="A personal blog"><meta name=author content="saurav"><link rel=canonical href=//localhost:1313/404.html><link crossorigin=anonymous href=./assets/css/stylesheet.f3b5a353c674b5e6b6989a6ec07a987e4eec46ddc105399d3b2df9cb53eaaa1f.css integrity="sha256-87WjU8Z0tea2mJpuwHqYfk7sRt3BBTmdOy35y1Pqqh8=" rel="preload stylesheet" as=style><link rel=icon href=//localhost:1313/%3Clink%20/%20abs%20url%3E><link rel=icon type=image/png sizes=16x16 href=//localhost:1313/%3Clink%20/%20abs%20url%3E><link rel=icon type=image/png sizes=32x32 href=//localhost:1313/%3Clink%20/%20abs%20url%3E><link rel=apple-touch-icon href=//localhost:1313/%3Clink%20/%20abs%20url%3E><link rel=mask-icon href=//localhost:1313/%3Clink%20/%20abs%20url%3E><meta name=theme-color content="#2e2e33"><meta name=msapplication-TileColor content="#2e2e33"><link rel=alternate hreflang=en href=//localhost:1313/404.html><noscript><style>#theme-toggle,.top-link{display:none}</style></noscript><script async src="https://www.googletagmanager.com/gtag/js?id=G-V0CXG8ZEG2"></script><script>var doNotTrack=!1,dnt=navigator.doNotTrack||window.doNotTrack||navigator.msDoNotTrack,doNotTrack=dnt=="1"||dnt=="yes";if(!doNotTrack){window.dataLayer=window.dataLayer||[];function gtag(){dataLayer.push(arguments)}gtag("js",new Date),gtag("config","G-V0CXG8ZEG2")}</script><meta property="og:url" content="//localhost:1313/404.html"><meta property="og:site_name" content="Saurav Dhakal"><meta property="og:title" content="404 Page not found"><meta property="og:description" content="A personal blog"><meta property="og:locale" content="en-us"><meta property="og:type" content="website"><meta name=twitter:card content="summary"><meta name=twitter:title content="404 Page not found"><meta name=twitter:description content="A personal blog"></head><body class=list id=top><header class=header><nav class=nav><div class=logo><a href=//localhost:1313/ accesskey=h title="SauravDhakal (Alt + H)">SauravDhakal</a><div class=logo-switches></div></div><ul id=menu><li><a href=//localhost:1313/posts/ title=Posts><span>Posts</span></a></li><li><a href=//localhost:1313/notes/ title=Notes><span>Notes</span></a></li><li><a href=//localhost:1313/tags/ title=Tags><span>Tags</span></a></li><li><a href=//localhost:1313/search/ title="Search (Alt + /)" accesskey=/><span>Search</span></a></li></ul></nav></header><main class=main><div class=not-found>404</div></main><footer class=footer><span>Copyright © 2026 SauravDhakal</span></footer><a href=#top aria-label="go to top" title="Go to Top (Alt + G)" class=top-link id=top-link accesskey=g><svg viewBox="0 0 12 6" fill="currentColor"><path d="M12 6H0l6-6z"/></svg>
|
||||||
</a><script>let menu=document.getElementById("menu");if(menu){const e=localStorage.getItem("menu-scroll-position");e&&(menu.scrollLeft=parseInt(e,10)),menu.onscroll=function(){localStorage.setItem("menu-scroll-position",menu.scrollLeft)}}document.querySelectorAll('a[href^="#"]').forEach(e=>{e.addEventListener("click",function(e){e.preventDefault();var t=this.getAttribute("href").substr(1);window.matchMedia("(prefers-reduced-motion: reduce)").matches?document.querySelector(`[id='${decodeURIComponent(t)}']`).scrollIntoView():document.querySelector(`[id='${decodeURIComponent(t)}']`).scrollIntoView({behavior:"smooth"}),t==="top"?history.replaceState(null,null," "):history.pushState(null,null,`#${t}`)})})</script><script>var mybutton=document.getElementById("top-link");window.onscroll=function(){document.body.scrollTop>800||document.documentElement.scrollTop>800?(mybutton.style.visibility="visible",mybutton.style.opacity="1"):(mybutton.style.visibility="hidden",mybutton.style.opacity="0")}</script></body></html>
|
</a><script>let menu=document.getElementById("menu");if(menu){const e=localStorage.getItem("menu-scroll-position");e&&(menu.scrollLeft=parseInt(e,10)),menu.onscroll=function(){localStorage.setItem("menu-scroll-position",menu.scrollLeft)}}document.querySelectorAll('a[href^="#"]').forEach(e=>{e.addEventListener("click",function(e){e.preventDefault();var t=this.getAttribute("href").substr(1);window.matchMedia("(prefers-reduced-motion: reduce)").matches?document.querySelector(`[id='${decodeURIComponent(t)}']`).scrollIntoView():document.querySelector(`[id='${decodeURIComponent(t)}']`).scrollIntoView({behavior:"smooth"}),t==="top"?history.replaceState(null,null," "):history.pushState(null,null,`#${t}`)})})</script><script>var mybutton=document.getElementById("top-link");window.onscroll=function(){document.body.scrollTop>800||document.documentElement.scrollTop>800?(mybutton.style.visibility="visible",mybutton.style.opacity="1"):(mybutton.style.visibility="hidden",mybutton.style.opacity="0")}</script></body></html>
|
||||||
File diff suppressed because one or more lines are too long
@@ -1,3 +0,0 @@
|
|||||||
<!doctype html><html lang=en dir=auto data-theme=dark><head><meta charset=utf-8><meta http-equiv=X-UA-Compatible content="IE=edge"><meta name=viewport content="width=device-width,initial-scale=1,shrink-to-fit=no"><meta name=robots content="index, follow"><title>Backend Development | Saurav Dhakal</title><meta name=keywords content><meta name=description content="A personal blog"><meta name=author content="saurav"><link rel=canonical href=https://sauravdhakal.com.np/categories/backend-development/><link crossorigin=anonymous href=/assets/css/stylesheet.1819d1b52fd9f2af4d88316fde3f9b918c48d08dac9a2e1ef0a7ca49d1f18ddb.css integrity="sha256-GBnRtS/Z8q9NiDFv3j+bkYxI0I2smi4e8KfKSdHxjds=" rel="preload stylesheet" as=style><link rel=icon href=https://sauravdhakal.com.np/%3Clink%20/%20abs%20url%3E><link rel=icon type=image/png sizes=16x16 href=https://sauravdhakal.com.np/%3Clink%20/%20abs%20url%3E><link rel=icon type=image/png sizes=32x32 href=https://sauravdhakal.com.np/%3Clink%20/%20abs%20url%3E><link rel=apple-touch-icon href=https://sauravdhakal.com.np/%3Clink%20/%20abs%20url%3E><link rel=mask-icon href=https://sauravdhakal.com.np/%3Clink%20/%20abs%20url%3E><meta name=theme-color content="#2e2e33"><meta name=msapplication-TileColor content="#2e2e33"><link rel=alternate type=application/rss+xml href=https://sauravdhakal.com.np/categories/backend-development/index.xml title=rss><link rel=alternate hreflang=en href=https://sauravdhakal.com.np/categories/backend-development/><noscript><style>#theme-toggle,.top-link{display:none}</style></noscript><script async src="https://www.googletagmanager.com/gtag/js?id=G-V0CXG8ZEG2"></script><script>var dnt,doNotTrack=!1;if(!1&&(dnt=navigator.doNotTrack||window.doNotTrack||navigator.msDoNotTrack,doNotTrack=dnt=="1"||dnt=="yes"),!doNotTrack){window.dataLayer=window.dataLayer||[];function gtag(){dataLayer.push(arguments)}gtag("js",new Date),gtag("config","G-V0CXG8ZEG2")}</script><meta property="og:url" content="https://sauravdhakal.com.np/categories/backend-development/"><meta property="og:site_name" content="Saurav Dhakal"><meta property="og:title" content="Backend Development"><meta property="og:description" content="A personal blog"><meta property="og:locale" content="en-us"><meta property="og:type" content="website"><meta name=twitter:card content="summary"><meta name=twitter:title content="Backend Development"><meta name=twitter:description content="A personal blog"></head><body class=list id=top><header class=header><nav class=nav><div class=logo><a href=https://sauravdhakal.com.np/ accesskey=h title="SauravDhakal (Alt + H)">SauravDhakal</a><div class=logo-switches></div></div><ul id=menu><li><a href=https://sauravdhakal.com.np/posts/ title=posts><span>posts</span></a></li><li><a href=https://sauravdhakal.com.np/tags/ title=tags><span>tags</span></a></li></ul></nav></header><main class=main><header class=page-header><div class=breadcrumbs><a href=https://sauravdhakal.com.np/>Home</a> » <a href=https://sauravdhakal.com.np/categories/>Categories</a></div><h1>Backend Development
|
|
||||||
<a href=/categories/backend-development/index.xml title=RSS aria-label=RSS><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" height="23"><path d="M4 11a9 9 0 019 9"/><path d="M4 4a16 16 0 0116 16"/><circle cx="5" cy="19" r="1"/></svg></a></h1></header><article class="post-entry tag-entry"><header class=entry-header><h2 class=entry-hint-parent>Understanding Separation of Concerns (SoC) in NestJS</h2></header><div class=entry-content><p>A guide to understanding Separation of Concerns in NestJS using modules, services, and controllers.</p></div><footer class=entry-footer><span title='2025-08-19 00:00:00 +0000 UTC'>August 19, 2025</span> · <span>4 min</span> · <span>767 words</span> · <span>Saurav Dhakal</span></footer><a class=entry-link aria-label="post link to Understanding Separation of Concerns (SoC) in NestJS" href=https://sauravdhakal.com.np/posts/seperation-of-concern-in-nextjs/></a></article></main><footer class=footer><span>Copyright © 2026 SauravDhakal</span></footer><a href=#top aria-label="go to top" title="Go to Top (Alt + G)" class=top-link id=top-link accesskey=g><svg viewBox="0 0 12 6" fill="currentColor"><path d="M12 6H0l6-6z"/></svg>
|
|
||||||
</a><script>let menu=document.getElementById("menu");if(menu){const e=localStorage.getItem("menu-scroll-position");e&&(menu.scrollLeft=parseInt(e,10)),menu.onscroll=function(){localStorage.setItem("menu-scroll-position",menu.scrollLeft)}}document.querySelectorAll('a[href^="#"]').forEach(e=>{e.addEventListener("click",function(e){e.preventDefault();var t=this.getAttribute("href").substr(1);window.matchMedia("(prefers-reduced-motion: reduce)").matches?document.querySelector(`[id='${decodeURIComponent(t)}']`).scrollIntoView():document.querySelector(`[id='${decodeURIComponent(t)}']`).scrollIntoView({behavior:"smooth"}),t==="top"?history.replaceState(null,null," "):history.pushState(null,null,`#${t}`)})})</script><script>var mybutton=document.getElementById("top-link");window.onscroll=function(){document.body.scrollTop>800||document.documentElement.scrollTop>800?(mybutton.style.visibility="visible",mybutton.style.opacity="1"):(mybutton.style.visibility="hidden",mybutton.style.opacity="0")}</script></body></html>
|
|
||||||
@@ -1,20 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
|
|
||||||
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/">
|
|
||||||
<channel>
|
|
||||||
<title>Backend Development on Saurav Dhakal</title>
|
|
||||||
<link>https://sauravdhakal.com.np/categories/backend-development/</link>
|
|
||||||
<description>Recent content in Backend Development on Saurav Dhakal</description>
|
|
||||||
<generator>Hugo -- 0.152.2</generator>
|
|
||||||
<language>en-us</language>
|
|
||||||
<copyright>SauravDhakal</copyright>
|
|
||||||
<lastBuildDate>Tue, 19 Aug 2025 00:00:00 +0000</lastBuildDate>
|
|
||||||
<atom:link href="https://sauravdhakal.com.np/categories/backend-development/index.xml" rel="self" type="application/rss+xml" />
|
|
||||||
<item>
|
|
||||||
<title>Understanding Separation of Concerns (SoC) in NestJS</title>
|
|
||||||
<link>https://sauravdhakal.com.np/posts/seperation-of-concern-in-nextjs/</link>
|
|
||||||
<pubDate>Tue, 19 Aug 2025 00:00:00 +0000</pubDate>
|
|
||||||
<guid>https://sauravdhakal.com.np/posts/seperation-of-concern-in-nextjs/</guid>
|
|
||||||
<description>A guide to understanding Separation of Concerns in NestJS using modules, services, and controllers.</description>
|
|
||||||
</item>
|
|
||||||
</channel>
|
|
||||||
</rss>
|
|
||||||
@@ -1 +0,0 @@
|
|||||||
<!doctype html><html lang=en-us><head><title>https://sauravdhakal.com.np/categories/backend-development/</title><link rel=canonical href=https://sauravdhakal.com.np/categories/backend-development/><meta charset=utf-8><meta http-equiv=refresh content="0; url=https://sauravdhakal.com.np/categories/backend-development/"></head></html>
|
|
||||||
@@ -1,2 +1,2 @@
|
|||||||
<!doctype html><html lang=en dir=auto data-theme=dark><head><meta charset=utf-8><meta http-equiv=X-UA-Compatible content="IE=edge"><meta name=viewport content="width=device-width,initial-scale=1,shrink-to-fit=no"><meta name=robots content="index, follow"><title>Categories | Saurav Dhakal</title><meta name=keywords content><meta name=description content="A personal blog"><meta name=author content="saurav"><link rel=canonical href=https://sauravdhakal.com.np/categories/><link crossorigin=anonymous href=/assets/css/stylesheet.1819d1b52fd9f2af4d88316fde3f9b918c48d08dac9a2e1ef0a7ca49d1f18ddb.css integrity="sha256-GBnRtS/Z8q9NiDFv3j+bkYxI0I2smi4e8KfKSdHxjds=" rel="preload stylesheet" as=style><link rel=icon href=https://sauravdhakal.com.np/%3Clink%20/%20abs%20url%3E><link rel=icon type=image/png sizes=16x16 href=https://sauravdhakal.com.np/%3Clink%20/%20abs%20url%3E><link rel=icon type=image/png sizes=32x32 href=https://sauravdhakal.com.np/%3Clink%20/%20abs%20url%3E><link rel=apple-touch-icon href=https://sauravdhakal.com.np/%3Clink%20/%20abs%20url%3E><link rel=mask-icon href=https://sauravdhakal.com.np/%3Clink%20/%20abs%20url%3E><meta name=theme-color content="#2e2e33"><meta name=msapplication-TileColor content="#2e2e33"><link rel=alternate type=application/rss+xml href=https://sauravdhakal.com.np/categories/index.xml title=rss><link rel=alternate hreflang=en href=https://sauravdhakal.com.np/categories/><noscript><style>#theme-toggle,.top-link{display:none}</style></noscript><script async src="https://www.googletagmanager.com/gtag/js?id=G-V0CXG8ZEG2"></script><script>var dnt,doNotTrack=!1;if(!1&&(dnt=navigator.doNotTrack||window.doNotTrack||navigator.msDoNotTrack,doNotTrack=dnt=="1"||dnt=="yes"),!doNotTrack){window.dataLayer=window.dataLayer||[];function gtag(){dataLayer.push(arguments)}gtag("js",new Date),gtag("config","G-V0CXG8ZEG2")}</script><meta property="og:url" content="https://sauravdhakal.com.np/categories/"><meta property="og:site_name" content="Saurav Dhakal"><meta property="og:title" content="Categories"><meta property="og:description" content="A personal blog"><meta property="og:locale" content="en-us"><meta property="og:type" content="website"><meta name=twitter:card content="summary"><meta name=twitter:title content="Categories"><meta name=twitter:description content="A personal blog"></head><body class=list id=top><header class=header><nav class=nav><div class=logo><a href=https://sauravdhakal.com.np/ accesskey=h title="SauravDhakal (Alt + H)">SauravDhakal</a><div class=logo-switches></div></div><ul id=menu><li><a href=https://sauravdhakal.com.np/posts/ title=posts><span>posts</span></a></li><li><a href=https://sauravdhakal.com.np/tags/ title=tags><span>tags</span></a></li></ul></nav></header><main class=main><header class=page-header><h1>Categories</h1></header><ul class=terms-tags><li><a href=https://sauravdhakal.com.np/categories/backend-development/>Backend Development <sup><strong><sup>1</sup></strong></sup></a></li><li><a href=https://sauravdhakal.com.np/categories/nestjs/>NestJS <sup><strong><sup>1</sup></strong></sup></a></li></ul></main><footer class=footer><span>Copyright © 2026 SauravDhakal</span></footer><a href=#top aria-label="go to top" title="Go to Top (Alt + G)" class=top-link id=top-link accesskey=g><svg viewBox="0 0 12 6" fill="currentColor"><path d="M12 6H0l6-6z"/></svg>
|
<!doctype html><html lang=en dir=auto data-theme=dark><head><script src="/livereload.js?mindelay=10&v=2&port=1313&path=livereload" data-no-instant defer></script><meta charset=utf-8><meta http-equiv=X-UA-Compatible content="IE=edge"><meta name=viewport content="width=device-width,initial-scale=1,shrink-to-fit=no"><meta name=robots content="index, follow"><title>Categories | Saurav Dhakal</title><meta name=keywords content><meta name=description content="A personal blog"><meta name=author content="saurav"><link rel=canonical href=//localhost:1313/categories/><link crossorigin=anonymous href=../assets/css/stylesheet.f3b5a353c674b5e6b6989a6ec07a987e4eec46ddc105399d3b2df9cb53eaaa1f.css integrity="sha256-87WjU8Z0tea2mJpuwHqYfk7sRt3BBTmdOy35y1Pqqh8=" rel="preload stylesheet" as=style><link rel=icon href=//localhost:1313/%3Clink%20/%20abs%20url%3E><link rel=icon type=image/png sizes=16x16 href=//localhost:1313/%3Clink%20/%20abs%20url%3E><link rel=icon type=image/png sizes=32x32 href=//localhost:1313/%3Clink%20/%20abs%20url%3E><link rel=apple-touch-icon href=//localhost:1313/%3Clink%20/%20abs%20url%3E><link rel=mask-icon href=//localhost:1313/%3Clink%20/%20abs%20url%3E><meta name=theme-color content="#2e2e33"><meta name=msapplication-TileColor content="#2e2e33"><link rel=alternate type=application/rss+xml href=//localhost:1313/categories/index.xml title=rss><link rel=alternate hreflang=en href=//localhost:1313/categories/><noscript><style>#theme-toggle,.top-link{display:none}</style></noscript><script async src="https://www.googletagmanager.com/gtag/js?id=G-V0CXG8ZEG2"></script><script>var doNotTrack=!1,dnt=navigator.doNotTrack||window.doNotTrack||navigator.msDoNotTrack,doNotTrack=dnt=="1"||dnt=="yes";if(!doNotTrack){window.dataLayer=window.dataLayer||[];function gtag(){dataLayer.push(arguments)}gtag("js",new Date),gtag("config","G-V0CXG8ZEG2")}</script><meta property="og:url" content="//localhost:1313/categories/"><meta property="og:site_name" content="Saurav Dhakal"><meta property="og:title" content="Categories"><meta property="og:description" content="A personal blog"><meta property="og:locale" content="en-us"><meta property="og:type" content="website"><meta name=twitter:card content="summary"><meta name=twitter:title content="Categories"><meta name=twitter:description content="A personal blog"></head><body class=list id=top><header class=header><nav class=nav><div class=logo><a href=//localhost:1313/ accesskey=h title="SauravDhakal (Alt + H)">SauravDhakal</a><div class=logo-switches></div></div><ul id=menu><li><a href=//localhost:1313/posts/ title=Posts><span>Posts</span></a></li><li><a href=//localhost:1313/notes/ title=Notes><span>Notes</span></a></li><li><a href=//localhost:1313/tags/ title=Tags><span>Tags</span></a></li><li><a href=//localhost:1313/search/ title="Search (Alt + /)" accesskey=/><span>Search</span></a></li></ul></nav></header><main class=main><header class=page-header><h1>Categories</h1></header><ul class=terms-tags></ul></main><footer class=footer><span>Copyright © 2026 SauravDhakal</span></footer><a href=#top aria-label="go to top" title="Go to Top (Alt + G)" class=top-link id=top-link accesskey=g><svg viewBox="0 0 12 6" fill="currentColor"><path d="M12 6H0l6-6z"/></svg>
|
||||||
</a><script>let menu=document.getElementById("menu");if(menu){const e=localStorage.getItem("menu-scroll-position");e&&(menu.scrollLeft=parseInt(e,10)),menu.onscroll=function(){localStorage.setItem("menu-scroll-position",menu.scrollLeft)}}document.querySelectorAll('a[href^="#"]').forEach(e=>{e.addEventListener("click",function(e){e.preventDefault();var t=this.getAttribute("href").substr(1);window.matchMedia("(prefers-reduced-motion: reduce)").matches?document.querySelector(`[id='${decodeURIComponent(t)}']`).scrollIntoView():document.querySelector(`[id='${decodeURIComponent(t)}']`).scrollIntoView({behavior:"smooth"}),t==="top"?history.replaceState(null,null," "):history.pushState(null,null,`#${t}`)})})</script><script>var mybutton=document.getElementById("top-link");window.onscroll=function(){document.body.scrollTop>800||document.documentElement.scrollTop>800?(mybutton.style.visibility="visible",mybutton.style.opacity="1"):(mybutton.style.visibility="hidden",mybutton.style.opacity="0")}</script></body></html>
|
</a><script>let menu=document.getElementById("menu");if(menu){const e=localStorage.getItem("menu-scroll-position");e&&(menu.scrollLeft=parseInt(e,10)),menu.onscroll=function(){localStorage.setItem("menu-scroll-position",menu.scrollLeft)}}document.querySelectorAll('a[href^="#"]').forEach(e=>{e.addEventListener("click",function(e){e.preventDefault();var t=this.getAttribute("href").substr(1);window.matchMedia("(prefers-reduced-motion: reduce)").matches?document.querySelector(`[id='${decodeURIComponent(t)}']`).scrollIntoView():document.querySelector(`[id='${decodeURIComponent(t)}']`).scrollIntoView({behavior:"smooth"}),t==="top"?history.replaceState(null,null," "):history.pushState(null,null,`#${t}`)})})</script><script>var mybutton=document.getElementById("top-link");window.onscroll=function(){document.body.scrollTop>800||document.documentElement.scrollTop>800?(mybutton.style.visibility="visible",mybutton.style.opacity="1"):(mybutton.style.visibility="hidden",mybutton.style.opacity="0")}</script></body></html>
|
||||||
@@ -2,26 +2,11 @@
|
|||||||
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/">
|
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/">
|
||||||
<channel>
|
<channel>
|
||||||
<title>Categories on Saurav Dhakal</title>
|
<title>Categories on Saurav Dhakal</title>
|
||||||
<link>https://sauravdhakal.com.np/categories/</link>
|
<link>//localhost:1313/categories/</link>
|
||||||
<description>Recent content in Categories on Saurav Dhakal</description>
|
<description>Recent content in Categories on Saurav Dhakal</description>
|
||||||
<generator>Hugo -- 0.152.2</generator>
|
<generator>Hugo -- 0.158.0</generator>
|
||||||
<language>en-us</language>
|
<language>en-us</language>
|
||||||
<copyright>SauravDhakal</copyright>
|
<copyright>SauravDhakal</copyright>
|
||||||
<lastBuildDate>Tue, 19 Aug 2025 00:00:00 +0000</lastBuildDate>
|
<atom:link href="//localhost:1313/categories/index.xml" rel="self" type="application/rss+xml" />
|
||||||
<atom:link href="https://sauravdhakal.com.np/categories/index.xml" rel="self" type="application/rss+xml" />
|
|
||||||
<item>
|
|
||||||
<title>Backend Development</title>
|
|
||||||
<link>https://sauravdhakal.com.np/categories/backend-development/</link>
|
|
||||||
<pubDate>Tue, 19 Aug 2025 00:00:00 +0000</pubDate>
|
|
||||||
<guid>https://sauravdhakal.com.np/categories/backend-development/</guid>
|
|
||||||
<description></description>
|
|
||||||
</item>
|
|
||||||
<item>
|
|
||||||
<title>NestJS</title>
|
|
||||||
<link>https://sauravdhakal.com.np/categories/nestjs/</link>
|
|
||||||
<pubDate>Tue, 19 Aug 2025 00:00:00 +0000</pubDate>
|
|
||||||
<guid>https://sauravdhakal.com.np/categories/nestjs/</guid>
|
|
||||||
<description></description>
|
|
||||||
</item>
|
|
||||||
</channel>
|
</channel>
|
||||||
</rss>
|
</rss>
|
||||||
|
|||||||
@@ -1,3 +0,0 @@
|
|||||||
<!doctype html><html lang=en dir=auto data-theme=dark><head><meta charset=utf-8><meta http-equiv=X-UA-Compatible content="IE=edge"><meta name=viewport content="width=device-width,initial-scale=1,shrink-to-fit=no"><meta name=robots content="index, follow"><title>NestJS | Saurav Dhakal</title><meta name=keywords content><meta name=description content="A personal blog"><meta name=author content="saurav"><link rel=canonical href=https://sauravdhakal.com.np/categories/nestjs/><link crossorigin=anonymous href=/assets/css/stylesheet.1819d1b52fd9f2af4d88316fde3f9b918c48d08dac9a2e1ef0a7ca49d1f18ddb.css integrity="sha256-GBnRtS/Z8q9NiDFv3j+bkYxI0I2smi4e8KfKSdHxjds=" rel="preload stylesheet" as=style><link rel=icon href=https://sauravdhakal.com.np/%3Clink%20/%20abs%20url%3E><link rel=icon type=image/png sizes=16x16 href=https://sauravdhakal.com.np/%3Clink%20/%20abs%20url%3E><link rel=icon type=image/png sizes=32x32 href=https://sauravdhakal.com.np/%3Clink%20/%20abs%20url%3E><link rel=apple-touch-icon href=https://sauravdhakal.com.np/%3Clink%20/%20abs%20url%3E><link rel=mask-icon href=https://sauravdhakal.com.np/%3Clink%20/%20abs%20url%3E><meta name=theme-color content="#2e2e33"><meta name=msapplication-TileColor content="#2e2e33"><link rel=alternate type=application/rss+xml href=https://sauravdhakal.com.np/categories/nestjs/index.xml title=rss><link rel=alternate hreflang=en href=https://sauravdhakal.com.np/categories/nestjs/><noscript><style>#theme-toggle,.top-link{display:none}</style></noscript><script async src="https://www.googletagmanager.com/gtag/js?id=G-V0CXG8ZEG2"></script><script>var dnt,doNotTrack=!1;if(!1&&(dnt=navigator.doNotTrack||window.doNotTrack||navigator.msDoNotTrack,doNotTrack=dnt=="1"||dnt=="yes"),!doNotTrack){window.dataLayer=window.dataLayer||[];function gtag(){dataLayer.push(arguments)}gtag("js",new Date),gtag("config","G-V0CXG8ZEG2")}</script><meta property="og:url" content="https://sauravdhakal.com.np/categories/nestjs/"><meta property="og:site_name" content="Saurav Dhakal"><meta property="og:title" content="NestJS"><meta property="og:description" content="A personal blog"><meta property="og:locale" content="en-us"><meta property="og:type" content="website"><meta name=twitter:card content="summary"><meta name=twitter:title content="NestJS"><meta name=twitter:description content="A personal blog"></head><body class=list id=top><header class=header><nav class=nav><div class=logo><a href=https://sauravdhakal.com.np/ accesskey=h title="SauravDhakal (Alt + H)">SauravDhakal</a><div class=logo-switches></div></div><ul id=menu><li><a href=https://sauravdhakal.com.np/posts/ title=posts><span>posts</span></a></li><li><a href=https://sauravdhakal.com.np/tags/ title=tags><span>tags</span></a></li></ul></nav></header><main class=main><header class=page-header><div class=breadcrumbs><a href=https://sauravdhakal.com.np/>Home</a> » <a href=https://sauravdhakal.com.np/categories/>Categories</a></div><h1>NestJS
|
|
||||||
<a href=/categories/nestjs/index.xml title=RSS aria-label=RSS><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" height="23"><path d="M4 11a9 9 0 019 9"/><path d="M4 4a16 16 0 0116 16"/><circle cx="5" cy="19" r="1"/></svg></a></h1></header><article class="post-entry tag-entry"><header class=entry-header><h2 class=entry-hint-parent>Understanding Separation of Concerns (SoC) in NestJS</h2></header><div class=entry-content><p>A guide to understanding Separation of Concerns in NestJS using modules, services, and controllers.</p></div><footer class=entry-footer><span title='2025-08-19 00:00:00 +0000 UTC'>August 19, 2025</span> · <span>4 min</span> · <span>767 words</span> · <span>Saurav Dhakal</span></footer><a class=entry-link aria-label="post link to Understanding Separation of Concerns (SoC) in NestJS" href=https://sauravdhakal.com.np/posts/seperation-of-concern-in-nextjs/></a></article></main><footer class=footer><span>Copyright © 2026 SauravDhakal</span></footer><a href=#top aria-label="go to top" title="Go to Top (Alt + G)" class=top-link id=top-link accesskey=g><svg viewBox="0 0 12 6" fill="currentColor"><path d="M12 6H0l6-6z"/></svg>
|
|
||||||
</a><script>let menu=document.getElementById("menu");if(menu){const e=localStorage.getItem("menu-scroll-position");e&&(menu.scrollLeft=parseInt(e,10)),menu.onscroll=function(){localStorage.setItem("menu-scroll-position",menu.scrollLeft)}}document.querySelectorAll('a[href^="#"]').forEach(e=>{e.addEventListener("click",function(e){e.preventDefault();var t=this.getAttribute("href").substr(1);window.matchMedia("(prefers-reduced-motion: reduce)").matches?document.querySelector(`[id='${decodeURIComponent(t)}']`).scrollIntoView():document.querySelector(`[id='${decodeURIComponent(t)}']`).scrollIntoView({behavior:"smooth"}),t==="top"?history.replaceState(null,null," "):history.pushState(null,null,`#${t}`)})})</script><script>var mybutton=document.getElementById("top-link");window.onscroll=function(){document.body.scrollTop>800||document.documentElement.scrollTop>800?(mybutton.style.visibility="visible",mybutton.style.opacity="1"):(mybutton.style.visibility="hidden",mybutton.style.opacity="0")}</script></body></html>
|
|
||||||
@@ -1,20 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
|
|
||||||
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/">
|
|
||||||
<channel>
|
|
||||||
<title>NestJS on Saurav Dhakal</title>
|
|
||||||
<link>https://sauravdhakal.com.np/categories/nestjs/</link>
|
|
||||||
<description>Recent content in NestJS on Saurav Dhakal</description>
|
|
||||||
<generator>Hugo -- 0.152.2</generator>
|
|
||||||
<language>en-us</language>
|
|
||||||
<copyright>SauravDhakal</copyright>
|
|
||||||
<lastBuildDate>Tue, 19 Aug 2025 00:00:00 +0000</lastBuildDate>
|
|
||||||
<atom:link href="https://sauravdhakal.com.np/categories/nestjs/index.xml" rel="self" type="application/rss+xml" />
|
|
||||||
<item>
|
|
||||||
<title>Understanding Separation of Concerns (SoC) in NestJS</title>
|
|
||||||
<link>https://sauravdhakal.com.np/posts/seperation-of-concern-in-nextjs/</link>
|
|
||||||
<pubDate>Tue, 19 Aug 2025 00:00:00 +0000</pubDate>
|
|
||||||
<guid>https://sauravdhakal.com.np/posts/seperation-of-concern-in-nextjs/</guid>
|
|
||||||
<description>A guide to understanding Separation of Concerns in NestJS using modules, services, and controllers.</description>
|
|
||||||
</item>
|
|
||||||
</channel>
|
|
||||||
</rss>
|
|
||||||
@@ -1 +0,0 @@
|
|||||||
<!doctype html><html lang=en-us><head><title>https://sauravdhakal.com.np/categories/nestjs/</title><link rel=canonical href=https://sauravdhakal.com.np/categories/nestjs/><meta charset=utf-8><meta http-equiv=refresh content="0; url=https://sauravdhakal.com.np/categories/nestjs/"></head></html>
|
|
||||||
@@ -1,4 +1,5 @@
|
|||||||
<!doctype html><html lang=en dir=auto data-theme=dark><head><meta name=generator content="Hugo 0.152.2"><meta charset=utf-8><meta http-equiv=X-UA-Compatible content="IE=edge"><meta name=viewport content="width=device-width,initial-scale=1,shrink-to-fit=no"><meta name=robots content="index, follow"><title>Saurav Dhakal</title><meta name=keywords content="Blog,Portfolio,SauravDhakal,Saurav,Dhakal,Backend"><meta name=description content="A personal blog"><meta name=author content="saurav"><link rel=canonical href=https://sauravdhakal.com.np/><link crossorigin=anonymous href=/assets/css/stylesheet.1819d1b52fd9f2af4d88316fde3f9b918c48d08dac9a2e1ef0a7ca49d1f18ddb.css integrity="sha256-GBnRtS/Z8q9NiDFv3j+bkYxI0I2smi4e8KfKSdHxjds=" rel="preload stylesheet" as=style><link rel=icon href=https://sauravdhakal.com.np/%3Clink%20/%20abs%20url%3E><link rel=icon type=image/png sizes=16x16 href=https://sauravdhakal.com.np/%3Clink%20/%20abs%20url%3E><link rel=icon type=image/png sizes=32x32 href=https://sauravdhakal.com.np/%3Clink%20/%20abs%20url%3E><link rel=apple-touch-icon href=https://sauravdhakal.com.np/%3Clink%20/%20abs%20url%3E><link rel=mask-icon href=https://sauravdhakal.com.np/%3Clink%20/%20abs%20url%3E><meta name=theme-color content="#2e2e33"><meta name=msapplication-TileColor content="#2e2e33"><link rel=alternate type=application/rss+xml href=https://sauravdhakal.com.np/index.xml title=rss><link rel=alternate type=application/json href=https://sauravdhakal.com.np/index.json title=json><link rel=alternate hreflang=en href=https://sauravdhakal.com.np/><noscript><style>#theme-toggle,.top-link{display:none}</style></noscript><script async src="https://www.googletagmanager.com/gtag/js?id=G-V0CXG8ZEG2"></script><script>var dnt,doNotTrack=!1;if(!1&&(dnt=navigator.doNotTrack||window.doNotTrack||navigator.msDoNotTrack,doNotTrack=dnt=="1"||dnt=="yes"),!doNotTrack){window.dataLayer=window.dataLayer||[];function gtag(){dataLayer.push(arguments)}gtag("js",new Date),gtag("config","G-V0CXG8ZEG2")}</script><meta property="og:url" content="https://sauravdhakal.com.np/"><meta property="og:site_name" content="Saurav Dhakal"><meta property="og:title" content="Saurav Dhakal"><meta property="og:description" content="A personal blog"><meta property="og:locale" content="en-us"><meta property="og:type" content="website"><meta name=twitter:card content="summary"><meta name=twitter:title content="Saurav Dhakal"><meta name=twitter:description content="A personal blog"><script type=application/ld+json>{"@context":"https://schema.org","@type":"Organization","name":"Saurav Dhakal","url":"https://sauravdhakal.com.np/","description":"A personal blog","logo":"https://sauravdhakal.com.np/%3Clink%20/%20abs%20url%3E","sameAs":["https://github.com/sauravdhakal12","https://www.linkedin.com/in/saurav-dhakal-9a8b27220/","https://x.com/s0x1495"]}</script></head><body class=list id=top><header class=header><nav class=nav><div class=logo><a href=https://sauravdhakal.com.np/ accesskey=h title="SauravDhakal (Alt + H)">SauravDhakal</a><div class=logo-switches></div></div><ul id=menu><li><a href=https://sauravdhakal.com.np/posts/ title=posts><span>posts</span></a></li><li><a href=https://sauravdhakal.com.np/tags/ title=tags><span>tags</span></a></li></ul></nav></header><main class=main><article class="first-entry home-info"><header class=entry-header><h1>Hi there 👋, I’m Saurav!</h1></header><div class=entry-content><p>I’m a software engineer who enjoys building thoughtful systems and learning how things really work. This is my digital garden - notes, projects, and lessons along the way.</p><ul><li></li></ul><p>Checkout my <a href=files/CV.pdf>CV</a> for my works and projects.</p></div><footer class=entry-footer><div class=social-icons><a href=https://github.com/sauravdhakal12 target=_blank rel="noopener noreferrer me" title=Github><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M9 19c-5 1.5-5-2.5-7-3m14 6v-3.87a3.37 3.37.0 00-.94-2.61c3.14-.35 6.44-1.54 6.44-7A5.44 5.44.0 0020 4.77 5.07 5.07.0 0019.91 1S18.73.65 16 2.48a13.38 13.38.0 00-7 0C6.27.65 5.09 1 5.09 1A5.07 5.07.0 005 4.77 5.44 5.44.0 003.5 8.55c0 5.42 3.3 6.61 6.44 7A3.37 3.37.0 009 18.13V22"/></svg>
|
<!doctype html><html lang=en dir=auto data-theme=dark><head><meta name=generator content="Hugo 0.158.0"><script src="/livereload.js?mindelay=10&v=2&port=1313&path=livereload" data-no-instant defer></script><meta charset=utf-8><meta http-equiv=X-UA-Compatible content="IE=edge"><meta name=viewport content="width=device-width,initial-scale=1,shrink-to-fit=no"><meta name=robots content="index, follow"><title>Saurav Dhakal</title><meta name=keywords content="Blog,Portfolio,SauravDhakal,Saurav,Dhakal,Backend"><meta name=description content="A personal blog"><meta name=author content="saurav"><link rel=canonical href=//localhost:1313/><link crossorigin=anonymous href=./assets/css/stylesheet.f3b5a353c674b5e6b6989a6ec07a987e4eec46ddc105399d3b2df9cb53eaaa1f.css integrity="sha256-87WjU8Z0tea2mJpuwHqYfk7sRt3BBTmdOy35y1Pqqh8=" rel="preload stylesheet" as=style><link rel=icon href=//localhost:1313/%3Clink%20/%20abs%20url%3E><link rel=icon type=image/png sizes=16x16 href=//localhost:1313/%3Clink%20/%20abs%20url%3E><link rel=icon type=image/png sizes=32x32 href=//localhost:1313/%3Clink%20/%20abs%20url%3E><link rel=apple-touch-icon href=//localhost:1313/%3Clink%20/%20abs%20url%3E><link rel=mask-icon href=//localhost:1313/%3Clink%20/%20abs%20url%3E><meta name=theme-color content="#2e2e33"><meta name=msapplication-TileColor content="#2e2e33"><link rel=alternate type=application/rss+xml href=//localhost:1313/index.xml title=rss><link rel=alternate type=application/json href=//localhost:1313/index.json title=json><link rel=alternate hreflang=en href=//localhost:1313/><noscript><style>#theme-toggle,.top-link{display:none}</style></noscript><script async src="https://www.googletagmanager.com/gtag/js?id=G-V0CXG8ZEG2"></script><script>var doNotTrack=!1,dnt=navigator.doNotTrack||window.doNotTrack||navigator.msDoNotTrack,doNotTrack=dnt=="1"||dnt=="yes";if(!doNotTrack){window.dataLayer=window.dataLayer||[];function gtag(){dataLayer.push(arguments)}gtag("js",new Date),gtag("config","G-V0CXG8ZEG2")}</script><meta property="og:url" content="//localhost:1313/"><meta property="og:site_name" content="Saurav Dhakal"><meta property="og:title" content="Saurav Dhakal"><meta property="og:description" content="A personal blog"><meta property="og:locale" content="en-us"><meta property="og:type" content="website"><meta name=twitter:card content="summary"><meta name=twitter:title content="Saurav Dhakal"><meta name=twitter:description content="A personal blog"><script type=application/ld+json>{"@context":"https://schema.org","@type":"Organization","name":"Saurav Dhakal","url":"//localhost:1313/","description":"A personal blog","logo":"//localhost:1313/%3Clink%20/%20abs%20url%3E","sameAs":["https://github.com/sauravdhakal12","https://www.linkedin.com/in/saurav-dhakal-9a8b27220/","https://x.com/s0x1495"]}</script></head><body class=list id=top><header class=header><nav class=nav><div class=logo><a href=//localhost:1313/ accesskey=h title="SauravDhakal (Alt + H)">SauravDhakal</a><div class=logo-switches></div></div><ul id=menu><li><a href=//localhost:1313/posts/ title=Posts><span>Posts</span></a></li><li><a href=//localhost:1313/notes/ title=Notes><span>Notes</span></a></li><li><a href=//localhost:1313/tags/ title=Tags><span>Tags</span></a></li><li><a href=//localhost:1313/search/ title="Search (Alt + /)" accesskey=/><span>Search</span></a></li></ul></nav></header><main class=main><article class="first-entry home-info"><header class=entry-header><h1>Hi there 👋, I’m Saurav!</h1></header><div class=entry-content>I’m a software engineer who enjoys building thoughtful systems and learning how things really work.<br><br>This is my digital garden - notes, projects, and lessons along the way.<br><br>Checkout my <a href=files/CV.pdf>CV</a> for my works and projects.</div><footer class=entry-footer><div class=social-icons><a href=https://github.com/sauravdhakal12 target=_blank rel="noopener noreferrer me" title=Github><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M9 19c-5 1.5-5-2.5-7-3m14 6v-3.87a3.37 3.37.0 00-.94-2.61c3.14-.35 6.44-1.54 6.44-7A5.44 5.44.0 0020 4.77 5.07 5.07.0 0019.91 1S18.73.65 16 2.48a13.38 13.38.0 00-7 0C6.27.65 5.09 1 5.09 1A5.07 5.07.0 005 4.77 5.44 5.44.0 003.5 8.55c0 5.42 3.3 6.61 6.44 7A3.37 3.37.0 009 18.13V22"/></svg>
|
||||||
</a><a href=https://www.linkedin.com/in/saurav-dhakal-9a8b27220/ target=_blank rel="noopener noreferrer me" title=Linkedin><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M16 8a6 6 0 016 6v7h-4v-7a2 2 0 00-2-2 2 2 0 00-2 2v7h-4v-7a6 6 0 016-6z"/><rect x="2" y="9" width="4" height="12"/><circle cx="4" cy="4" r="2"/></svg>
|
</a><a href=https://www.linkedin.com/in/saurav-dhakal-9a8b27220/ target=_blank rel="noopener noreferrer me" title=Linkedin><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M16 8a6 6 0 016 6v7h-4v-7a2 2 0 00-2-2 2 2 0 00-2 2v7h-4v-7a6 6 0 016-6z"/><rect x="2" y="9" width="4" height="12"/><circle cx="4" cy="4" r="2"/></svg>
|
||||||
</a><a href=https://x.com/s0x1495 target=_blank rel="noopener noreferrer me" title=X><svg viewBox="0 0 24 24" fill="currentColor"><path d="M18.244 2.25h3.308l-7.227 8.26 8.502 11.24H16.17l-5.214-6.817L4.99 21.75H1.68l7.73-8.835L1.254 2.25H8.08l4.713 6.231zm-1.161 17.52h1.833L7.084 4.126H5.117z"/></svg></a></div></footer></article><article class=post-entry><header class=entry-header><h2 class=entry-hint-parent>Search</h2></header><div class=entry-content><p>search</p></div><footer class=entry-footer><span>0 min</span> · <span>0 words</span> · <span>saurav</span></footer><a class=entry-link aria-label="post link to Search" href=https://sauravdhakal.com.np/notes/demo/></a></article></main><footer class=footer><span>Copyright © 2026 SauravDhakal</span></footer><a href=#top aria-label="go to top" title="Go to Top (Alt + G)" class=top-link id=top-link accesskey=g><svg viewBox="0 0 12 6" fill="currentColor"><path d="M12 6H0l6-6z"/></svg>
|
</a><a href=https://x.com/s0x1495 target=_blank rel="noopener noreferrer me" title=X><svg viewBox="0 0 24 24" fill="currentColor"><path d="M18.244 2.25h3.308l-7.227 8.26 8.502 11.24H16.17l-5.214-6.817L4.99 21.75H1.68l7.73-8.835L1.254 2.25H8.08l4.713 6.231zm-1.161 17.52h1.833L7.084 4.126H5.117z"/></svg></a></div></footer></article><article class=post-entry><header class=entry-header><h2 class=entry-hint-parent>Sample Note</h2></header><div class=entry-content><p>This is a sample note. Notes are meant to be short, quick thoughts or TILs (Today I Learned).
|
||||||
|
Delete this file and add your own notes here!</p></div><footer class=entry-footer><span title='2025-08-20 00:00:00 +0000 UTC'>August 20, 2025</span> · <span>1 min</span> · <span>27 words</span> · <span>saurav</span></footer><a class=entry-link aria-label="post link to Sample Note" href=//localhost:1313/notes/demo/></a></article></main><footer class=footer><span>Copyright © 2026 SauravDhakal</span></footer><a href=#top aria-label="go to top" title="Go to Top (Alt + G)" class=top-link id=top-link accesskey=g><svg viewBox="0 0 12 6" fill="currentColor"><path d="M12 6H0l6-6z"/></svg>
|
||||||
</a><script>let menu=document.getElementById("menu");if(menu){const e=localStorage.getItem("menu-scroll-position");e&&(menu.scrollLeft=parseInt(e,10)),menu.onscroll=function(){localStorage.setItem("menu-scroll-position",menu.scrollLeft)}}document.querySelectorAll('a[href^="#"]').forEach(e=>{e.addEventListener("click",function(e){e.preventDefault();var t=this.getAttribute("href").substr(1);window.matchMedia("(prefers-reduced-motion: reduce)").matches?document.querySelector(`[id='${decodeURIComponent(t)}']`).scrollIntoView():document.querySelector(`[id='${decodeURIComponent(t)}']`).scrollIntoView({behavior:"smooth"}),t==="top"?history.replaceState(null,null," "):history.pushState(null,null,`#${t}`)})})</script><script>var mybutton=document.getElementById("top-link");window.onscroll=function(){document.body.scrollTop>800||document.documentElement.scrollTop>800?(mybutton.style.visibility="visible",mybutton.style.opacity="1"):(mybutton.style.visibility="hidden",mybutton.style.opacity="0")}</script></body></html>
|
</a><script>let menu=document.getElementById("menu");if(menu){const e=localStorage.getItem("menu-scroll-position");e&&(menu.scrollLeft=parseInt(e,10)),menu.onscroll=function(){localStorage.setItem("menu-scroll-position",menu.scrollLeft)}}document.querySelectorAll('a[href^="#"]').forEach(e=>{e.addEventListener("click",function(e){e.preventDefault();var t=this.getAttribute("href").substr(1);window.matchMedia("(prefers-reduced-motion: reduce)").matches?document.querySelector(`[id='${decodeURIComponent(t)}']`).scrollIntoView():document.querySelector(`[id='${decodeURIComponent(t)}']`).scrollIntoView({behavior:"smooth"}),t==="top"?history.replaceState(null,null," "):history.pushState(null,null,`#${t}`)})})</script><script>var mybutton=document.getElementById("top-link");window.onscroll=function(){document.body.scrollTop>800||document.documentElement.scrollTop>800?(mybutton.style.visibility="visible",mybutton.style.opacity="1"):(mybutton.style.visibility="hidden",mybutton.style.opacity="0")}</script></body></html>
|
||||||
File diff suppressed because one or more lines are too long
@@ -2,19 +2,20 @@
|
|||||||
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/">
|
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/">
|
||||||
<channel>
|
<channel>
|
||||||
<title>Saurav Dhakal</title>
|
<title>Saurav Dhakal</title>
|
||||||
<link>https://sauravdhakal.com.np/</link>
|
<link>//localhost:1313/</link>
|
||||||
<description>Recent content on Saurav Dhakal</description>
|
<description>Recent content on Saurav Dhakal</description>
|
||||||
<generator>Hugo -- 0.152.2</generator>
|
<generator>Hugo -- 0.158.0</generator>
|
||||||
<language>en-us</language>
|
<language>en-us</language>
|
||||||
<copyright>SauravDhakal</copyright>
|
<copyright>SauravDhakal</copyright>
|
||||||
<lastBuildDate>Tue, 19 Aug 2025 00:00:00 +0000</lastBuildDate>
|
<lastBuildDate>Wed, 20 Aug 2025 00:00:00 +0000</lastBuildDate>
|
||||||
<atom:link href="https://sauravdhakal.com.np/index.xml" rel="self" type="application/rss+xml" />
|
<atom:link href="//localhost:1313/index.xml" rel="self" type="application/rss+xml" />
|
||||||
<item>
|
<item>
|
||||||
<title>Understanding Separation of Concerns (SoC) in NestJS</title>
|
<title>Sample Note</title>
|
||||||
<link>https://sauravdhakal.com.np/posts/seperation-of-concern-in-nextjs/</link>
|
<link>//localhost:1313/notes/demo/</link>
|
||||||
<pubDate>Tue, 19 Aug 2025 00:00:00 +0000</pubDate>
|
<pubDate>Wed, 20 Aug 2025 00:00:00 +0000</pubDate>
|
||||||
<guid>https://sauravdhakal.com.np/posts/seperation-of-concern-in-nextjs/</guid>
|
<guid>//localhost:1313/notes/demo/</guid>
|
||||||
<description>A guide to understanding Separation of Concerns in NestJS using modules, services, and controllers.</description>
|
<description><p>This is a sample note. Notes are meant to be short, quick thoughts or TILs (Today I Learned).</p>
|
||||||
|
<p>Delete this file and add your own notes here!</p></description>
|
||||||
</item>
|
</item>
|
||||||
</channel>
|
</channel>
|
||||||
</rss>
|
</rss>
|
||||||
|
|||||||
File diff suppressed because one or more lines are too long
@@ -1,3 +1,4 @@
|
|||||||
<!doctype html><html lang=en dir=auto data-theme=dark><head><meta charset=utf-8><meta http-equiv=X-UA-Compatible content="IE=edge"><meta name=viewport content="width=device-width,initial-scale=1,shrink-to-fit=no"><meta name=robots content="index, follow"><title>Notes | Saurav Dhakal</title><meta name=keywords content><meta name=description content="Notes - Saurav Dhakal"><meta name=author content="saurav"><link rel=canonical href=https://sauravdhakal.com.np/notes/><link crossorigin=anonymous href=/assets/css/stylesheet.1819d1b52fd9f2af4d88316fde3f9b918c48d08dac9a2e1ef0a7ca49d1f18ddb.css integrity="sha256-GBnRtS/Z8q9NiDFv3j+bkYxI0I2smi4e8KfKSdHxjds=" rel="preload stylesheet" as=style><link rel=icon href=https://sauravdhakal.com.np/%3Clink%20/%20abs%20url%3E><link rel=icon type=image/png sizes=16x16 href=https://sauravdhakal.com.np/%3Clink%20/%20abs%20url%3E><link rel=icon type=image/png sizes=32x32 href=https://sauravdhakal.com.np/%3Clink%20/%20abs%20url%3E><link rel=apple-touch-icon href=https://sauravdhakal.com.np/%3Clink%20/%20abs%20url%3E><link rel=mask-icon href=https://sauravdhakal.com.np/%3Clink%20/%20abs%20url%3E><meta name=theme-color content="#2e2e33"><meta name=msapplication-TileColor content="#2e2e33"><link rel=alternate type=application/rss+xml href=https://sauravdhakal.com.np/notes/index.xml title=rss><link rel=alternate hreflang=en href=https://sauravdhakal.com.np/notes/><noscript><style>#theme-toggle,.top-link{display:none}</style></noscript><script async src="https://www.googletagmanager.com/gtag/js?id=G-V0CXG8ZEG2"></script><script>var dnt,doNotTrack=!1;if(!1&&(dnt=navigator.doNotTrack||window.doNotTrack||navigator.msDoNotTrack,doNotTrack=dnt=="1"||dnt=="yes"),!doNotTrack){window.dataLayer=window.dataLayer||[];function gtag(){dataLayer.push(arguments)}gtag("js",new Date),gtag("config","G-V0CXG8ZEG2")}</script><meta property="og:url" content="https://sauravdhakal.com.np/notes/"><meta property="og:site_name" content="Saurav Dhakal"><meta property="og:title" content="Notes"><meta property="og:description" content="A personal blog"><meta property="og:locale" content="en-us"><meta property="og:type" content="website"><meta name=twitter:card content="summary"><meta name=twitter:title content="Notes"><meta name=twitter:description content="A personal blog"><script type=application/ld+json>{"@context":"https://schema.org","@type":"BreadcrumbList","itemListElement":[{"@type":"ListItem","position":1,"name":"Notes","item":"https://sauravdhakal.com.np/notes/"}]}</script></head><body class=list id=top><header class=header><nav class=nav><div class=logo><a href=https://sauravdhakal.com.np/ accesskey=h title="SauravDhakal (Alt + H)">SauravDhakal</a><div class=logo-switches></div></div><ul id=menu><li><a href=https://sauravdhakal.com.np/posts/ title=posts><span>posts</span></a></li><li><a href=https://sauravdhakal.com.np/tags/ title=tags><span>tags</span></a></li></ul></nav></header><main class=main><header class=page-header><div class=breadcrumbs><a href=https://sauravdhakal.com.np/>Home</a></div><h1>Notes
|
<!doctype html><html lang=en dir=auto data-theme=dark><head><script src="/livereload.js?mindelay=10&v=2&port=1313&path=livereload" data-no-instant defer></script><meta charset=utf-8><meta http-equiv=X-UA-Compatible content="IE=edge"><meta name=viewport content="width=device-width,initial-scale=1,shrink-to-fit=no"><meta name=robots content="index, follow"><title>Notes | Saurav Dhakal</title><meta name=keywords content><meta name=description content="Quick notes, TILs, and short thoughts"><meta name=author content="saurav"><link rel=canonical href=//localhost:1313/notes/><link crossorigin=anonymous href=../assets/css/stylesheet.f3b5a353c674b5e6b6989a6ec07a987e4eec46ddc105399d3b2df9cb53eaaa1f.css integrity="sha256-87WjU8Z0tea2mJpuwHqYfk7sRt3BBTmdOy35y1Pqqh8=" rel="preload stylesheet" as=style><link rel=icon href=//localhost:1313/%3Clink%20/%20abs%20url%3E><link rel=icon type=image/png sizes=16x16 href=//localhost:1313/%3Clink%20/%20abs%20url%3E><link rel=icon type=image/png sizes=32x32 href=//localhost:1313/%3Clink%20/%20abs%20url%3E><link rel=apple-touch-icon href=//localhost:1313/%3Clink%20/%20abs%20url%3E><link rel=mask-icon href=//localhost:1313/%3Clink%20/%20abs%20url%3E><meta name=theme-color content="#2e2e33"><meta name=msapplication-TileColor content="#2e2e33"><link rel=alternate type=application/rss+xml href=//localhost:1313/notes/index.xml title=rss><link rel=alternate hreflang=en href=//localhost:1313/notes/><noscript><style>#theme-toggle,.top-link{display:none}</style></noscript><script async src="https://www.googletagmanager.com/gtag/js?id=G-V0CXG8ZEG2"></script><script>var doNotTrack=!1,dnt=navigator.doNotTrack||window.doNotTrack||navigator.msDoNotTrack,doNotTrack=dnt=="1"||dnt=="yes";if(!doNotTrack){window.dataLayer=window.dataLayer||[];function gtag(){dataLayer.push(arguments)}gtag("js",new Date),gtag("config","G-V0CXG8ZEG2")}</script><meta property="og:url" content="//localhost:1313/notes/"><meta property="og:site_name" content="Saurav Dhakal"><meta property="og:title" content="Notes"><meta property="og:description" content="Quick notes, TILs, and short thoughts"><meta property="og:locale" content="en-us"><meta property="og:type" content="website"><meta name=twitter:card content="summary"><meta name=twitter:title content="Notes"><meta name=twitter:description content="Quick notes, TILs, and short thoughts"><script type=application/ld+json>{"@context":"https://schema.org","@type":"BreadcrumbList","itemListElement":[{"@type":"ListItem","position":1,"name":"Notes","item":"//localhost:1313/notes/"}]}</script></head><body class=list id=top><header class=header><nav class=nav><div class=logo><a href=//localhost:1313/ accesskey=h title="SauravDhakal (Alt + H)">SauravDhakal</a><div class=logo-switches></div></div><ul id=menu><li><a href=//localhost:1313/posts/ title=Posts><span>Posts</span></a></li><li><a href=//localhost:1313/notes/ title=Notes><span class=active>Notes</span></a></li><li><a href=//localhost:1313/tags/ title=Tags><span>Tags</span></a></li><li><a href=//localhost:1313/search/ title="Search (Alt + /)" accesskey=/><span>Search</span></a></li></ul></nav></header><main class=main><header class=page-header><h1>Notes</h1><div class=post-description>Quick notes, TILs, and short thoughts</div></header><div id=searchResults class=post-list></div><ul class=notes-list><li class=note-item><a href=//localhost:1313/notes/demo/><span class=note-title>Sample Note</span>
|
||||||
<a href=/notes/index.xml title=RSS aria-label=RSS><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" height="23"><path d="M4 11a9 9 0 019 9"/><path d="M4 4a16 16 0 0116 16"/><circle cx="5" cy="19" r="1"/></svg></a></h1></header><article class=post-entry><header class=entry-header><h2 class=entry-hint-parent>Search</h2></header><div class=entry-content><p>search</p></div><footer class=entry-footer><span>0 min</span> · <span>0 words</span> · <span>saurav</span></footer><a class=entry-link aria-label="post link to Search" href=https://sauravdhakal.com.np/notes/demo/></a></article></main><footer class=footer><span>Copyright © 2026 SauravDhakal</span></footer><a href=#top aria-label="go to top" title="Go to Top (Alt + G)" class=top-link id=top-link accesskey=g><svg viewBox="0 0 12 6" fill="currentColor"><path d="M12 6H0l6-6z"/></svg>
|
<span class=note-date>Aug 20, 2025</span></a><p class=note-summary>This is a sample note. Notes are meant to be short, quick thoughts or TILs (Today I Learned).
|
||||||
|
Delete …</p></li></ul></main><footer class=footer><span>Copyright © 2026 SauravDhakal</span></footer><a href=#top aria-label="go to top" title="Go to Top (Alt + G)" class=top-link id=top-link accesskey=g><svg viewBox="0 0 12 6" fill="currentColor"><path d="M12 6H0l6-6z"/></svg>
|
||||||
</a><script>let menu=document.getElementById("menu");if(menu){const e=localStorage.getItem("menu-scroll-position");e&&(menu.scrollLeft=parseInt(e,10)),menu.onscroll=function(){localStorage.setItem("menu-scroll-position",menu.scrollLeft)}}document.querySelectorAll('a[href^="#"]').forEach(e=>{e.addEventListener("click",function(e){e.preventDefault();var t=this.getAttribute("href").substr(1);window.matchMedia("(prefers-reduced-motion: reduce)").matches?document.querySelector(`[id='${decodeURIComponent(t)}']`).scrollIntoView():document.querySelector(`[id='${decodeURIComponent(t)}']`).scrollIntoView({behavior:"smooth"}),t==="top"?history.replaceState(null,null," "):history.pushState(null,null,`#${t}`)})})</script><script>var mybutton=document.getElementById("top-link");window.onscroll=function(){document.body.scrollTop>800||document.documentElement.scrollTop>800?(mybutton.style.visibility="visible",mybutton.style.opacity="1"):(mybutton.style.visibility="hidden",mybutton.style.opacity="0")}</script></body></html>
|
</a><script>let menu=document.getElementById("menu");if(menu){const e=localStorage.getItem("menu-scroll-position");e&&(menu.scrollLeft=parseInt(e,10)),menu.onscroll=function(){localStorage.setItem("menu-scroll-position",menu.scrollLeft)}}document.querySelectorAll('a[href^="#"]').forEach(e=>{e.addEventListener("click",function(e){e.preventDefault();var t=this.getAttribute("href").substr(1);window.matchMedia("(prefers-reduced-motion: reduce)").matches?document.querySelector(`[id='${decodeURIComponent(t)}']`).scrollIntoView():document.querySelector(`[id='${decodeURIComponent(t)}']`).scrollIntoView({behavior:"smooth"}),t==="top"?history.replaceState(null,null," "):history.pushState(null,null,`#${t}`)})})</script><script>var mybutton=document.getElementById("top-link");window.onscroll=function(){document.body.scrollTop>800||document.documentElement.scrollTop>800?(mybutton.style.visibility="visible",mybutton.style.opacity="1"):(mybutton.style.visibility="hidden",mybutton.style.opacity="0")}</script></body></html>
|
||||||
@@ -2,11 +2,20 @@
|
|||||||
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/">
|
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/">
|
||||||
<channel>
|
<channel>
|
||||||
<title>Notes on Saurav Dhakal</title>
|
<title>Notes on Saurav Dhakal</title>
|
||||||
<link>https://sauravdhakal.com.np/notes/</link>
|
<link>//localhost:1313/notes/</link>
|
||||||
<description>Recent content in Notes on Saurav Dhakal</description>
|
<description>Recent content in Notes on Saurav Dhakal</description>
|
||||||
<generator>Hugo -- 0.152.2</generator>
|
<generator>Hugo -- 0.158.0</generator>
|
||||||
<language>en-us</language>
|
<language>en-us</language>
|
||||||
<copyright>SauravDhakal</copyright>
|
<copyright>SauravDhakal</copyright>
|
||||||
<atom:link href="https://sauravdhakal.com.np/notes/index.xml" rel="self" type="application/rss+xml" />
|
<lastBuildDate>Wed, 20 Aug 2025 00:00:00 +0000</lastBuildDate>
|
||||||
|
<atom:link href="//localhost:1313/notes/index.xml" rel="self" type="application/rss+xml" />
|
||||||
|
<item>
|
||||||
|
<title>Sample Note</title>
|
||||||
|
<link>//localhost:1313/notes/demo/</link>
|
||||||
|
<pubDate>Wed, 20 Aug 2025 00:00:00 +0000</pubDate>
|
||||||
|
<guid>//localhost:1313/notes/demo/</guid>
|
||||||
|
<description><p>This is a sample note. Notes are meant to be short, quick thoughts or TILs (Today I Learned).</p>
|
||||||
|
<p>Delete this file and add your own notes here!</p></description>
|
||||||
|
</item>
|
||||||
</channel>
|
</channel>
|
||||||
</rss>
|
</rss>
|
||||||
|
|||||||
@@ -1 +0,0 @@
|
|||||||
<!doctype html><html lang=en-us><head><title>https://sauravdhakal.com.np/notes/</title><link rel=canonical href=https://sauravdhakal.com.np/notes/><meta charset=utf-8><meta http-equiv=refresh content="0; url=https://sauravdhakal.com.np/notes/"></head></html>
|
|
||||||
@@ -1 +1 @@
|
|||||||
<!doctype html><html lang=en-us><head><title>https://sauravdhakal.com.np/</title><link rel=canonical href=https://sauravdhakal.com.np/><meta charset=utf-8><meta http-equiv=refresh content="0; url=https://sauravdhakal.com.np/"></head></html>
|
<!doctype html><html lang=en-us><head><title>//localhost:1313/</title><link rel=canonical href=//localhost:1313/><meta charset=utf-8><meta http-equiv=refresh content="0; url=//localhost:1313/"></head></html>
|
||||||
@@ -1,3 +1,3 @@
|
|||||||
<!doctype html><html lang=en dir=auto data-theme=dark><head><meta charset=utf-8><meta http-equiv=X-UA-Compatible content="IE=edge"><meta name=viewport content="width=device-width,initial-scale=1,shrink-to-fit=no"><meta name=robots content="index, follow"><title>Posts | Saurav Dhakal</title><meta name=keywords content><meta name=description content="Posts - Saurav Dhakal"><meta name=author content="saurav"><link rel=canonical href=https://sauravdhakal.com.np/posts/><link crossorigin=anonymous href=/assets/css/stylesheet.1819d1b52fd9f2af4d88316fde3f9b918c48d08dac9a2e1ef0a7ca49d1f18ddb.css integrity="sha256-GBnRtS/Z8q9NiDFv3j+bkYxI0I2smi4e8KfKSdHxjds=" rel="preload stylesheet" as=style><link rel=icon href=https://sauravdhakal.com.np/%3Clink%20/%20abs%20url%3E><link rel=icon type=image/png sizes=16x16 href=https://sauravdhakal.com.np/%3Clink%20/%20abs%20url%3E><link rel=icon type=image/png sizes=32x32 href=https://sauravdhakal.com.np/%3Clink%20/%20abs%20url%3E><link rel=apple-touch-icon href=https://sauravdhakal.com.np/%3Clink%20/%20abs%20url%3E><link rel=mask-icon href=https://sauravdhakal.com.np/%3Clink%20/%20abs%20url%3E><meta name=theme-color content="#2e2e33"><meta name=msapplication-TileColor content="#2e2e33"><link rel=alternate type=application/rss+xml href=https://sauravdhakal.com.np/posts/index.xml title=rss><link rel=alternate hreflang=en href=https://sauravdhakal.com.np/posts/><noscript><style>#theme-toggle,.top-link{display:none}</style></noscript><script async src="https://www.googletagmanager.com/gtag/js?id=G-V0CXG8ZEG2"></script><script>var dnt,doNotTrack=!1;if(!1&&(dnt=navigator.doNotTrack||window.doNotTrack||navigator.msDoNotTrack,doNotTrack=dnt=="1"||dnt=="yes"),!doNotTrack){window.dataLayer=window.dataLayer||[];function gtag(){dataLayer.push(arguments)}gtag("js",new Date),gtag("config","G-V0CXG8ZEG2")}</script><meta property="og:url" content="https://sauravdhakal.com.np/posts/"><meta property="og:site_name" content="Saurav Dhakal"><meta property="og:title" content="Posts"><meta property="og:description" content="A personal blog"><meta property="og:locale" content="en-us"><meta property="og:type" content="website"><meta name=twitter:card content="summary"><meta name=twitter:title content="Posts"><meta name=twitter:description content="A personal blog"><script type=application/ld+json>{"@context":"https://schema.org","@type":"BreadcrumbList","itemListElement":[{"@type":"ListItem","position":1,"name":"Posts","item":"https://sauravdhakal.com.np/posts/"}]}</script></head><body class=list id=top><header class=header><nav class=nav><div class=logo><a href=https://sauravdhakal.com.np/ accesskey=h title="SauravDhakal (Alt + H)">SauravDhakal</a><div class=logo-switches></div></div><ul id=menu><li><a href=https://sauravdhakal.com.np/posts/ title=posts><span class=active>posts</span></a></li><li><a href=https://sauravdhakal.com.np/tags/ title=tags><span>tags</span></a></li></ul></nav></header><main class=main><header class=page-header><div class=breadcrumbs><a href=https://sauravdhakal.com.np/>Home</a></div><h1>Posts
|
<!doctype html><html lang=en dir=auto data-theme=dark><head><script src="/livereload.js?mindelay=10&v=2&port=1313&path=livereload" data-no-instant defer></script><meta charset=utf-8><meta http-equiv=X-UA-Compatible content="IE=edge"><meta name=viewport content="width=device-width,initial-scale=1,shrink-to-fit=no"><meta name=robots content="index, follow"><title>Posts | Saurav Dhakal</title><meta name=keywords content><meta name=description content="Long-form articles on software development, architecture, and engineering"><meta name=author content="saurav"><link rel=canonical href=//localhost:1313/posts/><link crossorigin=anonymous href=../assets/css/stylesheet.f3b5a353c674b5e6b6989a6ec07a987e4eec46ddc105399d3b2df9cb53eaaa1f.css integrity="sha256-87WjU8Z0tea2mJpuwHqYfk7sRt3BBTmdOy35y1Pqqh8=" rel="preload stylesheet" as=style><link rel=icon href=//localhost:1313/%3Clink%20/%20abs%20url%3E><link rel=icon type=image/png sizes=16x16 href=//localhost:1313/%3Clink%20/%20abs%20url%3E><link rel=icon type=image/png sizes=32x32 href=//localhost:1313/%3Clink%20/%20abs%20url%3E><link rel=apple-touch-icon href=//localhost:1313/%3Clink%20/%20abs%20url%3E><link rel=mask-icon href=//localhost:1313/%3Clink%20/%20abs%20url%3E><meta name=theme-color content="#2e2e33"><meta name=msapplication-TileColor content="#2e2e33"><link rel=alternate type=application/rss+xml href=//localhost:1313/posts/index.xml title=rss><link rel=alternate hreflang=en href=//localhost:1313/posts/><noscript><style>#theme-toggle,.top-link{display:none}</style></noscript><script async src="https://www.googletagmanager.com/gtag/js?id=G-V0CXG8ZEG2"></script><script>var doNotTrack=!1,dnt=navigator.doNotTrack||window.doNotTrack||navigator.msDoNotTrack,doNotTrack=dnt=="1"||dnt=="yes";if(!doNotTrack){window.dataLayer=window.dataLayer||[];function gtag(){dataLayer.push(arguments)}gtag("js",new Date),gtag("config","G-V0CXG8ZEG2")}</script><meta property="og:url" content="//localhost:1313/posts/"><meta property="og:site_name" content="Saurav Dhakal"><meta property="og:title" content="Posts"><meta property="og:description" content="Long-form articles on software development, architecture, and engineering"><meta property="og:locale" content="en-us"><meta property="og:type" content="website"><meta name=twitter:card content="summary"><meta name=twitter:title content="Posts"><meta name=twitter:description content="Long-form articles on software development, architecture, and engineering"><script type=application/ld+json>{"@context":"https://schema.org","@type":"BreadcrumbList","itemListElement":[{"@type":"ListItem","position":1,"name":"Posts","item":"//localhost:1313/posts/"}]}</script></head><body class=list id=top><header class=header><nav class=nav><div class=logo><a href=//localhost:1313/ accesskey=h title="SauravDhakal (Alt + H)">SauravDhakal</a><div class=logo-switches></div></div><ul id=menu><li><a href=//localhost:1313/posts/ title=Posts><span class=active>Posts</span></a></li><li><a href=//localhost:1313/notes/ title=Notes><span>Notes</span></a></li><li><a href=//localhost:1313/tags/ title=Tags><span>Tags</span></a></li><li><a href=//localhost:1313/search/ title="Search (Alt + /)" accesskey=/><span>Search</span></a></li></ul></nav></header><main class=main><header class=page-header><div class=breadcrumbs><a href=//localhost:1313/>Home</a></div><h1>Posts
|
||||||
<a href=/posts/index.xml title=RSS aria-label=RSS><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" height="23"><path d="M4 11a9 9 0 019 9"/><path d="M4 4a16 16 0 0116 16"/><circle cx="5" cy="19" r="1"/></svg></a></h1></header><article class=post-entry><header class=entry-header><h2 class=entry-hint-parent>Understanding Separation of Concerns (SoC) in NestJS</h2></header><div class=entry-content><p>A guide to understanding Separation of Concerns in NestJS using modules, services, and controllers.</p></div><footer class=entry-footer><span title='2025-08-19 00:00:00 +0000 UTC'>August 19, 2025</span> · <span>4 min</span> · <span>767 words</span> · <span>Saurav Dhakal</span></footer><a class=entry-link aria-label="post link to Understanding Separation of Concerns (SoC) in NestJS" href=https://sauravdhakal.com.np/posts/seperation-of-concern-in-nextjs/></a></article></main><footer class=footer><span>Copyright © 2026 SauravDhakal</span></footer><a href=#top aria-label="go to top" title="Go to Top (Alt + G)" class=top-link id=top-link accesskey=g><svg viewBox="0 0 12 6" fill="currentColor"><path d="M12 6H0l6-6z"/></svg>
|
<a href=../posts/index.xml title=RSS aria-label=RSS><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" height="23"><path d="M4 11a9 9 0 019 9"/><path d="M4 4a16 16 0 0116 16"/><circle cx="5" cy="19" r="1"/></svg></a></h1><div class=post-description>Long-form articles on software development, architecture, and engineering</div></header></main><footer class=footer><span>Copyright © 2026 SauravDhakal</span></footer><a href=#top aria-label="go to top" title="Go to Top (Alt + G)" class=top-link id=top-link accesskey=g><svg viewBox="0 0 12 6" fill="currentColor"><path d="M12 6H0l6-6z"/></svg>
|
||||||
</a><script>let menu=document.getElementById("menu");if(menu){const e=localStorage.getItem("menu-scroll-position");e&&(menu.scrollLeft=parseInt(e,10)),menu.onscroll=function(){localStorage.setItem("menu-scroll-position",menu.scrollLeft)}}document.querySelectorAll('a[href^="#"]').forEach(e=>{e.addEventListener("click",function(e){e.preventDefault();var t=this.getAttribute("href").substr(1);window.matchMedia("(prefers-reduced-motion: reduce)").matches?document.querySelector(`[id='${decodeURIComponent(t)}']`).scrollIntoView():document.querySelector(`[id='${decodeURIComponent(t)}']`).scrollIntoView({behavior:"smooth"}),t==="top"?history.replaceState(null,null," "):history.pushState(null,null,`#${t}`)})})</script><script>var mybutton=document.getElementById("top-link");window.onscroll=function(){document.body.scrollTop>800||document.documentElement.scrollTop>800?(mybutton.style.visibility="visible",mybutton.style.opacity="1"):(mybutton.style.visibility="hidden",mybutton.style.opacity="0")}</script></body></html>
|
</a><script>let menu=document.getElementById("menu");if(menu){const e=localStorage.getItem("menu-scroll-position");e&&(menu.scrollLeft=parseInt(e,10)),menu.onscroll=function(){localStorage.setItem("menu-scroll-position",menu.scrollLeft)}}document.querySelectorAll('a[href^="#"]').forEach(e=>{e.addEventListener("click",function(e){e.preventDefault();var t=this.getAttribute("href").substr(1);window.matchMedia("(prefers-reduced-motion: reduce)").matches?document.querySelector(`[id='${decodeURIComponent(t)}']`).scrollIntoView():document.querySelector(`[id='${decodeURIComponent(t)}']`).scrollIntoView({behavior:"smooth"}),t==="top"?history.replaceState(null,null," "):history.pushState(null,null,`#${t}`)})})</script><script>var mybutton=document.getElementById("top-link");window.onscroll=function(){document.body.scrollTop>800||document.documentElement.scrollTop>800?(mybutton.style.visibility="visible",mybutton.style.opacity="1"):(mybutton.style.visibility="hidden",mybutton.style.opacity="0")}</script></body></html>
|
||||||
@@ -2,19 +2,11 @@
|
|||||||
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/">
|
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/">
|
||||||
<channel>
|
<channel>
|
||||||
<title>Posts on Saurav Dhakal</title>
|
<title>Posts on Saurav Dhakal</title>
|
||||||
<link>https://sauravdhakal.com.np/posts/</link>
|
<link>//localhost:1313/posts/</link>
|
||||||
<description>Recent content in Posts on Saurav Dhakal</description>
|
<description>Recent content in Posts on Saurav Dhakal</description>
|
||||||
<generator>Hugo -- 0.152.2</generator>
|
<generator>Hugo -- 0.158.0</generator>
|
||||||
<language>en-us</language>
|
<language>en-us</language>
|
||||||
<copyright>SauravDhakal</copyright>
|
<copyright>SauravDhakal</copyright>
|
||||||
<lastBuildDate>Tue, 19 Aug 2025 00:00:00 +0000</lastBuildDate>
|
<atom:link href="//localhost:1313/posts/index.xml" rel="self" type="application/rss+xml" />
|
||||||
<atom:link href="https://sauravdhakal.com.np/posts/index.xml" rel="self" type="application/rss+xml" />
|
|
||||||
<item>
|
|
||||||
<title>Understanding Separation of Concerns (SoC) in NestJS</title>
|
|
||||||
<link>https://sauravdhakal.com.np/posts/seperation-of-concern-in-nextjs/</link>
|
|
||||||
<pubDate>Tue, 19 Aug 2025 00:00:00 +0000</pubDate>
|
|
||||||
<guid>https://sauravdhakal.com.np/posts/seperation-of-concern-in-nextjs/</guid>
|
|
||||||
<description>A guide to understanding Separation of Concerns in NestJS using modules, services, and controllers.</description>
|
|
||||||
</item>
|
|
||||||
</channel>
|
</channel>
|
||||||
</rss>
|
</rss>
|
||||||
|
|||||||
@@ -1 +1 @@
|
|||||||
<!doctype html><html lang=en-us><head><title>https://sauravdhakal.com.np/posts/</title><link rel=canonical href=https://sauravdhakal.com.np/posts/><meta charset=utf-8><meta http-equiv=refresh content="0; url=https://sauravdhakal.com.np/posts/"></head></html>
|
<!doctype html><html lang=en-us><head><title>//localhost:1313/posts/</title><link rel=canonical href=//localhost:1313/posts/><meta charset=utf-8><meta http-equiv=refresh content="0; url=//localhost:1313/posts/"></head></html>
|
||||||
File diff suppressed because one or more lines are too long
@@ -1,3 +1,3 @@
|
|||||||
User-agent: *
|
User-agent: *
|
||||||
Disallow:
|
Disallow:
|
||||||
Sitemap: https://sauravdhakal.com.np/sitemap.xml
|
Sitemap: //localhost:1313/sitemap.xml
|
||||||
|
|||||||
@@ -1,2 +1,2 @@
|
|||||||
<!doctype html><html lang=en dir=auto data-theme=dark><head><meta charset=utf-8><meta http-equiv=X-UA-Compatible content="IE=edge"><meta name=viewport content="width=device-width,initial-scale=1,shrink-to-fit=no"><meta name=robots content="index, follow"><title>Search | Saurav Dhakal</title><meta name=keywords content><meta name=description content="search"><meta name=author content="saurav"><link rel=canonical href=https://sauravdhakal.com.np/search/><link crossorigin=anonymous href=/assets/css/stylesheet.1819d1b52fd9f2af4d88316fde3f9b918c48d08dac9a2e1ef0a7ca49d1f18ddb.css integrity="sha256-GBnRtS/Z8q9NiDFv3j+bkYxI0I2smi4e8KfKSdHxjds=" rel="preload stylesheet" as=style><link crossorigin=anonymous rel=preload as=fetch href=../index.json><script defer crossorigin=anonymous src=/assets/js/search.b58269539d49d6ca2d32b61a53054d36df61ba713a257cbe66f257e175cb4d73.js integrity="sha256-tYJpU51J1sotMrYaUwVNNt9hunE6JXy+ZvJX4XXLTXM="></script><link rel=icon href=https://sauravdhakal.com.np/%3Clink%20/%20abs%20url%3E><link rel=icon type=image/png sizes=16x16 href=https://sauravdhakal.com.np/%3Clink%20/%20abs%20url%3E><link rel=icon type=image/png sizes=32x32 href=https://sauravdhakal.com.np/%3Clink%20/%20abs%20url%3E><link rel=apple-touch-icon href=https://sauravdhakal.com.np/%3Clink%20/%20abs%20url%3E><link rel=mask-icon href=https://sauravdhakal.com.np/%3Clink%20/%20abs%20url%3E><meta name=theme-color content="#2e2e33"><meta name=msapplication-TileColor content="#2e2e33"><link rel=alternate hreflang=en href=https://sauravdhakal.com.np/search/><noscript><style>#theme-toggle,.top-link{display:none}</style></noscript><script async src="https://www.googletagmanager.com/gtag/js?id=G-V0CXG8ZEG2"></script><script>var dnt,doNotTrack=!1;if(!1&&(dnt=navigator.doNotTrack||window.doNotTrack||navigator.msDoNotTrack,doNotTrack=dnt=="1"||dnt=="yes"),!doNotTrack){window.dataLayer=window.dataLayer||[];function gtag(){dataLayer.push(arguments)}gtag("js",new Date),gtag("config","G-V0CXG8ZEG2")}</script><meta property="og:url" content="https://sauravdhakal.com.np/search/"><meta property="og:site_name" content="Saurav Dhakal"><meta property="og:title" content="Search"><meta property="og:description" content="search"><meta property="og:locale" content="en-us"><meta property="og:type" content="article"><meta name=twitter:card content="summary"><meta name=twitter:title content="Search"><meta name=twitter:description content="search"><script type=application/ld+json>{"@context":"https://schema.org","@type":"BreadcrumbList","itemListElement":[{"@type":"ListItem","position":1,"name":"Search","item":"https://sauravdhakal.com.np/search/"}]}</script><script type=application/ld+json>{"@context":"https://schema.org","@type":"BlogPosting","headline":"Search","name":"Search","description":"search","keywords":[],"articleBody":"","wordCount":"0","inLanguage":"en","datePublished":"0001-01-01T00:00:00Z","dateModified":"0001-01-01T00:00:00Z","author":{"@type":"Person","name":"saurav"},"mainEntityOfPage":{"@type":"WebPage","@id":"https://sauravdhakal.com.np/search/"},"publisher":{"@type":"Organization","name":"Saurav Dhakal","logo":{"@type":"ImageObject","url":"https://sauravdhakal.com.np/%3Clink%20/%20abs%20url%3E"}}}</script></head><body class=list id=top><header class=header><nav class=nav><div class=logo><a href=https://sauravdhakal.com.np/ accesskey=h title="SauravDhakal (Alt + H)">SauravDhakal</a><div class=logo-switches></div></div><ul id=menu><li><a href=https://sauravdhakal.com.np/posts/ title=posts><span>posts</span></a></li><li><a href=https://sauravdhakal.com.np/tags/ title=tags><span>tags</span></a></li></ul></nav></header><main class=main><header class=page-header><h1>Search <svg width="28" height="28" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><circle cx="11" cy="11" r="8"/><line x1="21" y1="21" x2="16.65" y2="16.65"/></svg></h1><div class=post-meta></div></header><div id=searchbox><input id=searchInput autofocus placeholder="placeholder text in search input box" aria-label=search type=search autocomplete=off maxlength=64><ul id=searchResults aria-label="search results"></ul></div></main><footer class=footer><span>Copyright © 2026 SauravDhakal</span></footer><a href=#top aria-label="go to top" title="Go to Top (Alt + G)" class=top-link id=top-link accesskey=g><svg viewBox="0 0 12 6" fill="currentColor"><path d="M12 6H0l6-6z"/></svg>
|
<!doctype html><html lang=en dir=auto data-theme=dark><head><script src="/livereload.js?mindelay=10&v=2&port=1313&path=livereload" data-no-instant defer></script><meta charset=utf-8><meta http-equiv=X-UA-Compatible content="IE=edge"><meta name=viewport content="width=device-width,initial-scale=1,shrink-to-fit=no"><meta name=robots content="index, follow"><title>Search | Saurav Dhakal</title><meta name=keywords content><meta name=description content="Search posts and notes"><meta name=author content="saurav"><link rel=canonical href=//localhost:1313/search/><link crossorigin=anonymous href=../assets/css/stylesheet.f3b5a353c674b5e6b6989a6ec07a987e4eec46ddc105399d3b2df9cb53eaaa1f.css integrity="sha256-87WjU8Z0tea2mJpuwHqYfk7sRt3BBTmdOy35y1Pqqh8=" rel="preload stylesheet" as=style><link crossorigin=anonymous rel=preload as=fetch href=../index.json><script defer crossorigin=anonymous src=../assets/js/search.b58269539d49d6ca2d32b61a53054d36df61ba713a257cbe66f257e175cb4d73.js integrity="sha256-tYJpU51J1sotMrYaUwVNNt9hunE6JXy+ZvJX4XXLTXM="></script><link rel=icon href=//localhost:1313/%3Clink%20/%20abs%20url%3E><link rel=icon type=image/png sizes=16x16 href=//localhost:1313/%3Clink%20/%20abs%20url%3E><link rel=icon type=image/png sizes=32x32 href=//localhost:1313/%3Clink%20/%20abs%20url%3E><link rel=apple-touch-icon href=//localhost:1313/%3Clink%20/%20abs%20url%3E><link rel=mask-icon href=//localhost:1313/%3Clink%20/%20abs%20url%3E><meta name=theme-color content="#2e2e33"><meta name=msapplication-TileColor content="#2e2e33"><link rel=alternate hreflang=en href=//localhost:1313/search/><noscript><style>#theme-toggle,.top-link{display:none}</style></noscript><script async src="https://www.googletagmanager.com/gtag/js?id=G-V0CXG8ZEG2"></script><script>var doNotTrack=!1,dnt=navigator.doNotTrack||window.doNotTrack||navigator.msDoNotTrack,doNotTrack=dnt=="1"||dnt=="yes";if(!doNotTrack){window.dataLayer=window.dataLayer||[];function gtag(){dataLayer.push(arguments)}gtag("js",new Date),gtag("config","G-V0CXG8ZEG2")}</script><meta property="og:url" content="//localhost:1313/search/"><meta property="og:site_name" content="Saurav Dhakal"><meta property="og:title" content="Search"><meta property="og:description" content="Search posts and notes"><meta property="og:locale" content="en-us"><meta property="og:type" content="article"><meta name=twitter:card content="summary"><meta name=twitter:title content="Search"><meta name=twitter:description content="Search posts and notes"><script type=application/ld+json>{"@context":"https://schema.org","@type":"BreadcrumbList","itemListElement":[{"@type":"ListItem","position":1,"name":"Search","item":"//localhost:1313/search/"}]}</script><script type=application/ld+json>{"@context":"https://schema.org","@type":"BlogPosting","headline":"Search","name":"Search","description":"Search posts and notes","keywords":[],"articleBody":"","wordCount":"0","inLanguage":"en","datePublished":"0001-01-01T00:00:00Z","dateModified":"0001-01-01T00:00:00Z","author":{"@type":"Person","name":"saurav"},"mainEntityOfPage":{"@type":"WebPage","@id":"//localhost:1313/search/"},"publisher":{"@type":"Organization","name":"Saurav Dhakal","logo":{"@type":"ImageObject","url":"//localhost:1313/%3Clink%20/%20abs%20url%3E"}}}</script></head><body class=list id=top><header class=header><nav class=nav><div class=logo><a href=//localhost:1313/ accesskey=h title="SauravDhakal (Alt + H)">SauravDhakal</a><div class=logo-switches></div></div><ul id=menu><li><a href=//localhost:1313/posts/ title=Posts><span>Posts</span></a></li><li><a href=//localhost:1313/notes/ title=Notes><span>Notes</span></a></li><li><a href=//localhost:1313/tags/ title=Tags><span>Tags</span></a></li><li><a href=//localhost:1313/search/ title="Search (Alt + /)" accesskey=/><span class=active>Search</span></a></li></ul></nav></header><main class=main><header class=page-header><h1>Search <svg width="28" height="28" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><circle cx="11" cy="11" r="8"/><line x1="21" y1="21" x2="16.65" y2="16.65"/></svg></h1><div class=post-meta></div></header><div id=searchbox><input id=searchInput autofocus placeholder=Search... aria-label=search type=search autocomplete=off maxlength=64><ul id=searchResults aria-label="search results"></ul></div></main><footer class=footer><span>Copyright © 2026 SauravDhakal</span></footer><a href=#top aria-label="go to top" title="Go to Top (Alt + G)" class=top-link id=top-link accesskey=g><svg viewBox="0 0 12 6" fill="currentColor"><path d="M12 6H0l6-6z"/></svg>
|
||||||
</a><script>let menu=document.getElementById("menu");if(menu){const e=localStorage.getItem("menu-scroll-position");e&&(menu.scrollLeft=parseInt(e,10)),menu.onscroll=function(){localStorage.setItem("menu-scroll-position",menu.scrollLeft)}}document.querySelectorAll('a[href^="#"]').forEach(e=>{e.addEventListener("click",function(e){e.preventDefault();var t=this.getAttribute("href").substr(1);window.matchMedia("(prefers-reduced-motion: reduce)").matches?document.querySelector(`[id='${decodeURIComponent(t)}']`).scrollIntoView():document.querySelector(`[id='${decodeURIComponent(t)}']`).scrollIntoView({behavior:"smooth"}),t==="top"?history.replaceState(null,null," "):history.pushState(null,null,`#${t}`)})})</script><script>var mybutton=document.getElementById("top-link");window.onscroll=function(){document.body.scrollTop>800||document.documentElement.scrollTop>800?(mybutton.style.visibility="visible",mybutton.style.opacity="1"):(mybutton.style.visibility="hidden",mybutton.style.opacity="0")}</script></body></html>
|
</a><script>let menu=document.getElementById("menu");if(menu){const e=localStorage.getItem("menu-scroll-position");e&&(menu.scrollLeft=parseInt(e,10)),menu.onscroll=function(){localStorage.setItem("menu-scroll-position",menu.scrollLeft)}}document.querySelectorAll('a[href^="#"]').forEach(e=>{e.addEventListener("click",function(e){e.preventDefault();var t=this.getAttribute("href").substr(1);window.matchMedia("(prefers-reduced-motion: reduce)").matches?document.querySelector(`[id='${decodeURIComponent(t)}']`).scrollIntoView():document.querySelector(`[id='${decodeURIComponent(t)}']`).scrollIntoView({behavior:"smooth"}),t==="top"?history.replaceState(null,null," "):history.pushState(null,null,`#${t}`)})})</script><script>var mybutton=document.getElementById("top-link");window.onscroll=function(){document.body.scrollTop>800||document.documentElement.scrollTop>800?(mybutton.style.visibility="visible",mybutton.style.opacity="1"):(mybutton.style.visibility="hidden",mybutton.style.opacity="0")}</script></body></html>
|
||||||
@@ -2,40 +2,25 @@
|
|||||||
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9"
|
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9"
|
||||||
xmlns:xhtml="http://www.w3.org/1999/xhtml">
|
xmlns:xhtml="http://www.w3.org/1999/xhtml">
|
||||||
<url>
|
<url>
|
||||||
<loc>https://sauravdhakal.com.np/tags/architecture/</loc>
|
<loc>//localhost:1313/tags/example/</loc>
|
||||||
<lastmod>2025-08-19T00:00:00+00:00</lastmod>
|
<lastmod>2025-08-20T00:00:00+00:00</lastmod>
|
||||||
</url><url>
|
</url><url>
|
||||||
<loc>https://sauravdhakal.com.np/categories/backend-development/</loc>
|
<loc>//localhost:1313/notes/</loc>
|
||||||
<lastmod>2025-08-19T00:00:00+00:00</lastmod>
|
<lastmod>2025-08-20T00:00:00+00:00</lastmod>
|
||||||
</url><url>
|
</url><url>
|
||||||
<loc>https://sauravdhakal.com.np/categories/</loc>
|
<loc>//localhost:1313/notes/demo/</loc>
|
||||||
<lastmod>2025-08-19T00:00:00+00:00</lastmod>
|
<lastmod>2025-08-20T00:00:00+00:00</lastmod>
|
||||||
</url><url>
|
</url><url>
|
||||||
<loc>https://sauravdhakal.com.np/tags/nestjs/</loc>
|
<loc>//localhost:1313/</loc>
|
||||||
<lastmod>2025-08-19T00:00:00+00:00</lastmod>
|
<lastmod>2025-08-20T00:00:00+00:00</lastmod>
|
||||||
</url><url>
|
</url><url>
|
||||||
<loc>https://sauravdhakal.com.np/categories/nestjs/</loc>
|
<loc>//localhost:1313/tags/</loc>
|
||||||
<lastmod>2025-08-19T00:00:00+00:00</lastmod>
|
<lastmod>2025-08-20T00:00:00+00:00</lastmod>
|
||||||
</url><url>
|
</url><url>
|
||||||
<loc>https://sauravdhakal.com.np/posts/</loc>
|
<loc>//localhost:1313/categories/</loc>
|
||||||
<lastmod>2025-08-19T00:00:00+00:00</lastmod>
|
|
||||||
</url><url>
|
</url><url>
|
||||||
<loc>https://sauravdhakal.com.np/</loc>
|
<loc>//localhost:1313/posts/</loc>
|
||||||
<lastmod>2025-08-19T00:00:00+00:00</lastmod>
|
|
||||||
</url><url>
|
</url><url>
|
||||||
<loc>https://sauravdhakal.com.np/tags/</loc>
|
<loc>//localhost:1313/search/</loc>
|
||||||
<lastmod>2025-08-19T00:00:00+00:00</lastmod>
|
|
||||||
</url><url>
|
|
||||||
<loc>https://sauravdhakal.com.np/tags/typescript/</loc>
|
|
||||||
<lastmod>2025-08-19T00:00:00+00:00</lastmod>
|
|
||||||
</url><url>
|
|
||||||
<loc>https://sauravdhakal.com.np/posts/seperation-of-concern-in-nextjs/</loc>
|
|
||||||
<lastmod>2025-08-19T00:00:00+00:00</lastmod>
|
|
||||||
</url><url>
|
|
||||||
<loc>https://sauravdhakal.com.np/notes/</loc>
|
|
||||||
</url><url>
|
|
||||||
<loc>https://sauravdhakal.com.np/notes/demo/</loc>
|
|
||||||
</url><url>
|
|
||||||
<loc>https://sauravdhakal.com.np/search/</loc>
|
|
||||||
</url>
|
</url>
|
||||||
</urlset>
|
</urlset>
|
||||||
|
|||||||
@@ -1,3 +0,0 @@
|
|||||||
<!doctype html><html lang=en dir=auto data-theme=dark><head><meta charset=utf-8><meta http-equiv=X-UA-Compatible content="IE=edge"><meta name=viewport content="width=device-width,initial-scale=1,shrink-to-fit=no"><meta name=robots content="index, follow"><title>Architecture | Saurav Dhakal</title><meta name=keywords content><meta name=description content="A personal blog"><meta name=author content="saurav"><link rel=canonical href=https://sauravdhakal.com.np/tags/architecture/><link crossorigin=anonymous href=/assets/css/stylesheet.1819d1b52fd9f2af4d88316fde3f9b918c48d08dac9a2e1ef0a7ca49d1f18ddb.css integrity="sha256-GBnRtS/Z8q9NiDFv3j+bkYxI0I2smi4e8KfKSdHxjds=" rel="preload stylesheet" as=style><link rel=icon href=https://sauravdhakal.com.np/%3Clink%20/%20abs%20url%3E><link rel=icon type=image/png sizes=16x16 href=https://sauravdhakal.com.np/%3Clink%20/%20abs%20url%3E><link rel=icon type=image/png sizes=32x32 href=https://sauravdhakal.com.np/%3Clink%20/%20abs%20url%3E><link rel=apple-touch-icon href=https://sauravdhakal.com.np/%3Clink%20/%20abs%20url%3E><link rel=mask-icon href=https://sauravdhakal.com.np/%3Clink%20/%20abs%20url%3E><meta name=theme-color content="#2e2e33"><meta name=msapplication-TileColor content="#2e2e33"><link rel=alternate type=application/rss+xml href=https://sauravdhakal.com.np/tags/architecture/index.xml title=rss><link rel=alternate hreflang=en href=https://sauravdhakal.com.np/tags/architecture/><noscript><style>#theme-toggle,.top-link{display:none}</style></noscript><script async src="https://www.googletagmanager.com/gtag/js?id=G-V0CXG8ZEG2"></script><script>var dnt,doNotTrack=!1;if(!1&&(dnt=navigator.doNotTrack||window.doNotTrack||navigator.msDoNotTrack,doNotTrack=dnt=="1"||dnt=="yes"),!doNotTrack){window.dataLayer=window.dataLayer||[];function gtag(){dataLayer.push(arguments)}gtag("js",new Date),gtag("config","G-V0CXG8ZEG2")}</script><meta property="og:url" content="https://sauravdhakal.com.np/tags/architecture/"><meta property="og:site_name" content="Saurav Dhakal"><meta property="og:title" content="Architecture"><meta property="og:description" content="A personal blog"><meta property="og:locale" content="en-us"><meta property="og:type" content="website"><meta name=twitter:card content="summary"><meta name=twitter:title content="Architecture"><meta name=twitter:description content="A personal blog"></head><body class=list id=top><header class=header><nav class=nav><div class=logo><a href=https://sauravdhakal.com.np/ accesskey=h title="SauravDhakal (Alt + H)">SauravDhakal</a><div class=logo-switches></div></div><ul id=menu><li><a href=https://sauravdhakal.com.np/posts/ title=posts><span>posts</span></a></li><li><a href=https://sauravdhakal.com.np/tags/ title=tags><span>tags</span></a></li></ul></nav></header><main class=main><header class=page-header><div class=breadcrumbs><a href=https://sauravdhakal.com.np/>Home</a> » <a href=https://sauravdhakal.com.np/tags/>Tags</a></div><h1>Architecture
|
|
||||||
<a href=/tags/architecture/index.xml title=RSS aria-label=RSS><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" height="23"><path d="M4 11a9 9 0 019 9"/><path d="M4 4a16 16 0 0116 16"/><circle cx="5" cy="19" r="1"/></svg></a></h1></header><article class="post-entry tag-entry"><header class=entry-header><h2 class=entry-hint-parent>Understanding Separation of Concerns (SoC) in NestJS</h2></header><div class=entry-content><p>A guide to understanding Separation of Concerns in NestJS using modules, services, and controllers.</p></div><footer class=entry-footer><span title='2025-08-19 00:00:00 +0000 UTC'>August 19, 2025</span> · <span>4 min</span> · <span>767 words</span> · <span>Saurav Dhakal</span></footer><a class=entry-link aria-label="post link to Understanding Separation of Concerns (SoC) in NestJS" href=https://sauravdhakal.com.np/posts/seperation-of-concern-in-nextjs/></a></article></main><footer class=footer><span>Copyright © 2026 SauravDhakal</span></footer><a href=#top aria-label="go to top" title="Go to Top (Alt + G)" class=top-link id=top-link accesskey=g><svg viewBox="0 0 12 6" fill="currentColor"><path d="M12 6H0l6-6z"/></svg>
|
|
||||||
</a><script>let menu=document.getElementById("menu");if(menu){const e=localStorage.getItem("menu-scroll-position");e&&(menu.scrollLeft=parseInt(e,10)),menu.onscroll=function(){localStorage.setItem("menu-scroll-position",menu.scrollLeft)}}document.querySelectorAll('a[href^="#"]').forEach(e=>{e.addEventListener("click",function(e){e.preventDefault();var t=this.getAttribute("href").substr(1);window.matchMedia("(prefers-reduced-motion: reduce)").matches?document.querySelector(`[id='${decodeURIComponent(t)}']`).scrollIntoView():document.querySelector(`[id='${decodeURIComponent(t)}']`).scrollIntoView({behavior:"smooth"}),t==="top"?history.replaceState(null,null," "):history.pushState(null,null,`#${t}`)})})</script><script>var mybutton=document.getElementById("top-link");window.onscroll=function(){document.body.scrollTop>800||document.documentElement.scrollTop>800?(mybutton.style.visibility="visible",mybutton.style.opacity="1"):(mybutton.style.visibility="hidden",mybutton.style.opacity="0")}</script></body></html>
|
|
||||||
@@ -1,20 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
|
|
||||||
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/">
|
|
||||||
<channel>
|
|
||||||
<title>Architecture on Saurav Dhakal</title>
|
|
||||||
<link>https://sauravdhakal.com.np/tags/architecture/</link>
|
|
||||||
<description>Recent content in Architecture on Saurav Dhakal</description>
|
|
||||||
<generator>Hugo -- 0.152.2</generator>
|
|
||||||
<language>en-us</language>
|
|
||||||
<copyright>SauravDhakal</copyright>
|
|
||||||
<lastBuildDate>Tue, 19 Aug 2025 00:00:00 +0000</lastBuildDate>
|
|
||||||
<atom:link href="https://sauravdhakal.com.np/tags/architecture/index.xml" rel="self" type="application/rss+xml" />
|
|
||||||
<item>
|
|
||||||
<title>Understanding Separation of Concerns (SoC) in NestJS</title>
|
|
||||||
<link>https://sauravdhakal.com.np/posts/seperation-of-concern-in-nextjs/</link>
|
|
||||||
<pubDate>Tue, 19 Aug 2025 00:00:00 +0000</pubDate>
|
|
||||||
<guid>https://sauravdhakal.com.np/posts/seperation-of-concern-in-nextjs/</guid>
|
|
||||||
<description>A guide to understanding Separation of Concerns in NestJS using modules, services, and controllers.</description>
|
|
||||||
</item>
|
|
||||||
</channel>
|
|
||||||
</rss>
|
|
||||||
@@ -1 +0,0 @@
|
|||||||
<!doctype html><html lang=en-us><head><title>https://sauravdhakal.com.np/tags/architecture/</title><link rel=canonical href=https://sauravdhakal.com.np/tags/architecture/><meta charset=utf-8><meta http-equiv=refresh content="0; url=https://sauravdhakal.com.np/tags/architecture/"></head></html>
|
|
||||||
@@ -1,2 +1,2 @@
|
|||||||
<!doctype html><html lang=en dir=auto data-theme=dark><head><meta charset=utf-8><meta http-equiv=X-UA-Compatible content="IE=edge"><meta name=viewport content="width=device-width,initial-scale=1,shrink-to-fit=no"><meta name=robots content="index, follow"><title>Tags | Saurav Dhakal</title><meta name=keywords content><meta name=description content="A personal blog"><meta name=author content="saurav"><link rel=canonical href=https://sauravdhakal.com.np/tags/><link crossorigin=anonymous href=/assets/css/stylesheet.1819d1b52fd9f2af4d88316fde3f9b918c48d08dac9a2e1ef0a7ca49d1f18ddb.css integrity="sha256-GBnRtS/Z8q9NiDFv3j+bkYxI0I2smi4e8KfKSdHxjds=" rel="preload stylesheet" as=style><link rel=icon href=https://sauravdhakal.com.np/%3Clink%20/%20abs%20url%3E><link rel=icon type=image/png sizes=16x16 href=https://sauravdhakal.com.np/%3Clink%20/%20abs%20url%3E><link rel=icon type=image/png sizes=32x32 href=https://sauravdhakal.com.np/%3Clink%20/%20abs%20url%3E><link rel=apple-touch-icon href=https://sauravdhakal.com.np/%3Clink%20/%20abs%20url%3E><link rel=mask-icon href=https://sauravdhakal.com.np/%3Clink%20/%20abs%20url%3E><meta name=theme-color content="#2e2e33"><meta name=msapplication-TileColor content="#2e2e33"><link rel=alternate type=application/rss+xml href=https://sauravdhakal.com.np/tags/index.xml title=rss><link rel=alternate hreflang=en href=https://sauravdhakal.com.np/tags/><noscript><style>#theme-toggle,.top-link{display:none}</style></noscript><script async src="https://www.googletagmanager.com/gtag/js?id=G-V0CXG8ZEG2"></script><script>var dnt,doNotTrack=!1;if(!1&&(dnt=navigator.doNotTrack||window.doNotTrack||navigator.msDoNotTrack,doNotTrack=dnt=="1"||dnt=="yes"),!doNotTrack){window.dataLayer=window.dataLayer||[];function gtag(){dataLayer.push(arguments)}gtag("js",new Date),gtag("config","G-V0CXG8ZEG2")}</script><meta property="og:url" content="https://sauravdhakal.com.np/tags/"><meta property="og:site_name" content="Saurav Dhakal"><meta property="og:title" content="Tags"><meta property="og:description" content="A personal blog"><meta property="og:locale" content="en-us"><meta property="og:type" content="website"><meta name=twitter:card content="summary"><meta name=twitter:title content="Tags"><meta name=twitter:description content="A personal blog"></head><body class=list id=top><header class=header><nav class=nav><div class=logo><a href=https://sauravdhakal.com.np/ accesskey=h title="SauravDhakal (Alt + H)">SauravDhakal</a><div class=logo-switches></div></div><ul id=menu><li><a href=https://sauravdhakal.com.np/posts/ title=posts><span>posts</span></a></li><li><a href=https://sauravdhakal.com.np/tags/ title=tags><span class=active>tags</span></a></li></ul></nav></header><main class=main><header class=page-header><h1>Tags</h1></header><ul class=terms-tags><li><a href=https://sauravdhakal.com.np/tags/architecture/>architecture <sup><strong><sup>1</sup></strong></sup></a></li><li><a href=https://sauravdhakal.com.np/tags/nestjs/>nestjs <sup><strong><sup>1</sup></strong></sup></a></li><li><a href=https://sauravdhakal.com.np/tags/typescript/>typescript <sup><strong><sup>1</sup></strong></sup></a></li></ul></main><footer class=footer><span>Copyright © 2026 SauravDhakal</span></footer><a href=#top aria-label="go to top" title="Go to Top (Alt + G)" class=top-link id=top-link accesskey=g><svg viewBox="0 0 12 6" fill="currentColor"><path d="M12 6H0l6-6z"/></svg>
|
<!doctype html><html lang=en dir=auto data-theme=dark><head><script src="/livereload.js?mindelay=10&v=2&port=1313&path=livereload" data-no-instant defer></script><meta charset=utf-8><meta http-equiv=X-UA-Compatible content="IE=edge"><meta name=viewport content="width=device-width,initial-scale=1,shrink-to-fit=no"><meta name=robots content="index, follow"><title>Tags | Saurav Dhakal</title><meta name=keywords content><meta name=description content="A personal blog"><meta name=author content="saurav"><link rel=canonical href=//localhost:1313/tags/><link crossorigin=anonymous href=../assets/css/stylesheet.f3b5a353c674b5e6b6989a6ec07a987e4eec46ddc105399d3b2df9cb53eaaa1f.css integrity="sha256-87WjU8Z0tea2mJpuwHqYfk7sRt3BBTmdOy35y1Pqqh8=" rel="preload stylesheet" as=style><link rel=icon href=//localhost:1313/%3Clink%20/%20abs%20url%3E><link rel=icon type=image/png sizes=16x16 href=//localhost:1313/%3Clink%20/%20abs%20url%3E><link rel=icon type=image/png sizes=32x32 href=//localhost:1313/%3Clink%20/%20abs%20url%3E><link rel=apple-touch-icon href=//localhost:1313/%3Clink%20/%20abs%20url%3E><link rel=mask-icon href=//localhost:1313/%3Clink%20/%20abs%20url%3E><meta name=theme-color content="#2e2e33"><meta name=msapplication-TileColor content="#2e2e33"><link rel=alternate type=application/rss+xml href=//localhost:1313/tags/index.xml title=rss><link rel=alternate hreflang=en href=//localhost:1313/tags/><noscript><style>#theme-toggle,.top-link{display:none}</style></noscript><script async src="https://www.googletagmanager.com/gtag/js?id=G-V0CXG8ZEG2"></script><script>var doNotTrack=!1,dnt=navigator.doNotTrack||window.doNotTrack||navigator.msDoNotTrack,doNotTrack=dnt=="1"||dnt=="yes";if(!doNotTrack){window.dataLayer=window.dataLayer||[];function gtag(){dataLayer.push(arguments)}gtag("js",new Date),gtag("config","G-V0CXG8ZEG2")}</script><meta property="og:url" content="//localhost:1313/tags/"><meta property="og:site_name" content="Saurav Dhakal"><meta property="og:title" content="Tags"><meta property="og:description" content="A personal blog"><meta property="og:locale" content="en-us"><meta property="og:type" content="website"><meta name=twitter:card content="summary"><meta name=twitter:title content="Tags"><meta name=twitter:description content="A personal blog"></head><body class=list id=top><header class=header><nav class=nav><div class=logo><a href=//localhost:1313/ accesskey=h title="SauravDhakal (Alt + H)">SauravDhakal</a><div class=logo-switches></div></div><ul id=menu><li><a href=//localhost:1313/posts/ title=Posts><span>Posts</span></a></li><li><a href=//localhost:1313/notes/ title=Notes><span>Notes</span></a></li><li><a href=//localhost:1313/tags/ title=Tags><span class=active>Tags</span></a></li><li><a href=//localhost:1313/search/ title="Search (Alt + /)" accesskey=/><span>Search</span></a></li></ul></nav></header><main class=main><header class=page-header><h1>Tags</h1></header><ul class=terms-tags><li><a href=//localhost:1313/tags/example/>example <sup><strong><sup>1</sup></strong></sup></a></li></ul></main><footer class=footer><span>Copyright © 2026 SauravDhakal</span></footer><a href=#top aria-label="go to top" title="Go to Top (Alt + G)" class=top-link id=top-link accesskey=g><svg viewBox="0 0 12 6" fill="currentColor"><path d="M12 6H0l6-6z"/></svg>
|
||||||
</a><script>let menu=document.getElementById("menu");if(menu){const e=localStorage.getItem("menu-scroll-position");e&&(menu.scrollLeft=parseInt(e,10)),menu.onscroll=function(){localStorage.setItem("menu-scroll-position",menu.scrollLeft)}}document.querySelectorAll('a[href^="#"]').forEach(e=>{e.addEventListener("click",function(e){e.preventDefault();var t=this.getAttribute("href").substr(1);window.matchMedia("(prefers-reduced-motion: reduce)").matches?document.querySelector(`[id='${decodeURIComponent(t)}']`).scrollIntoView():document.querySelector(`[id='${decodeURIComponent(t)}']`).scrollIntoView({behavior:"smooth"}),t==="top"?history.replaceState(null,null," "):history.pushState(null,null,`#${t}`)})})</script><script>var mybutton=document.getElementById("top-link");window.onscroll=function(){document.body.scrollTop>800||document.documentElement.scrollTop>800?(mybutton.style.visibility="visible",mybutton.style.opacity="1"):(mybutton.style.visibility="hidden",mybutton.style.opacity="0")}</script></body></html>
|
</a><script>let menu=document.getElementById("menu");if(menu){const e=localStorage.getItem("menu-scroll-position");e&&(menu.scrollLeft=parseInt(e,10)),menu.onscroll=function(){localStorage.setItem("menu-scroll-position",menu.scrollLeft)}}document.querySelectorAll('a[href^="#"]').forEach(e=>{e.addEventListener("click",function(e){e.preventDefault();var t=this.getAttribute("href").substr(1);window.matchMedia("(prefers-reduced-motion: reduce)").matches?document.querySelector(`[id='${decodeURIComponent(t)}']`).scrollIntoView():document.querySelector(`[id='${decodeURIComponent(t)}']`).scrollIntoView({behavior:"smooth"}),t==="top"?history.replaceState(null,null," "):history.pushState(null,null,`#${t}`)})})</script><script>var mybutton=document.getElementById("top-link");window.onscroll=function(){document.body.scrollTop>800||document.documentElement.scrollTop>800?(mybutton.style.visibility="visible",mybutton.style.opacity="1"):(mybutton.style.visibility="hidden",mybutton.style.opacity="0")}</script></body></html>
|
||||||
@@ -2,32 +2,18 @@
|
|||||||
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/">
|
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/">
|
||||||
<channel>
|
<channel>
|
||||||
<title>Tags on Saurav Dhakal</title>
|
<title>Tags on Saurav Dhakal</title>
|
||||||
<link>https://sauravdhakal.com.np/tags/</link>
|
<link>//localhost:1313/tags/</link>
|
||||||
<description>Recent content in Tags on Saurav Dhakal</description>
|
<description>Recent content in Tags on Saurav Dhakal</description>
|
||||||
<generator>Hugo -- 0.152.2</generator>
|
<generator>Hugo -- 0.158.0</generator>
|
||||||
<language>en-us</language>
|
<language>en-us</language>
|
||||||
<copyright>SauravDhakal</copyright>
|
<copyright>SauravDhakal</copyright>
|
||||||
<lastBuildDate>Tue, 19 Aug 2025 00:00:00 +0000</lastBuildDate>
|
<lastBuildDate>Wed, 20 Aug 2025 00:00:00 +0000</lastBuildDate>
|
||||||
<atom:link href="https://sauravdhakal.com.np/tags/index.xml" rel="self" type="application/rss+xml" />
|
<atom:link href="//localhost:1313/tags/index.xml" rel="self" type="application/rss+xml" />
|
||||||
<item>
|
<item>
|
||||||
<title>Architecture</title>
|
<title>Example</title>
|
||||||
<link>https://sauravdhakal.com.np/tags/architecture/</link>
|
<link>//localhost:1313/tags/example/</link>
|
||||||
<pubDate>Tue, 19 Aug 2025 00:00:00 +0000</pubDate>
|
<pubDate>Wed, 20 Aug 2025 00:00:00 +0000</pubDate>
|
||||||
<guid>https://sauravdhakal.com.np/tags/architecture/</guid>
|
<guid>//localhost:1313/tags/example/</guid>
|
||||||
<description></description>
|
|
||||||
</item>
|
|
||||||
<item>
|
|
||||||
<title>Nestjs</title>
|
|
||||||
<link>https://sauravdhakal.com.np/tags/nestjs/</link>
|
|
||||||
<pubDate>Tue, 19 Aug 2025 00:00:00 +0000</pubDate>
|
|
||||||
<guid>https://sauravdhakal.com.np/tags/nestjs/</guid>
|
|
||||||
<description></description>
|
|
||||||
</item>
|
|
||||||
<item>
|
|
||||||
<title>Typescript</title>
|
|
||||||
<link>https://sauravdhakal.com.np/tags/typescript/</link>
|
|
||||||
<pubDate>Tue, 19 Aug 2025 00:00:00 +0000</pubDate>
|
|
||||||
<guid>https://sauravdhakal.com.np/tags/typescript/</guid>
|
|
||||||
<description></description>
|
<description></description>
|
||||||
</item>
|
</item>
|
||||||
</channel>
|
</channel>
|
||||||
|
|||||||
@@ -1,3 +0,0 @@
|
|||||||
<!doctype html><html lang=en dir=auto data-theme=dark><head><meta charset=utf-8><meta http-equiv=X-UA-Compatible content="IE=edge"><meta name=viewport content="width=device-width,initial-scale=1,shrink-to-fit=no"><meta name=robots content="index, follow"><title>Nestjs | Saurav Dhakal</title><meta name=keywords content><meta name=description content="A personal blog"><meta name=author content="saurav"><link rel=canonical href=https://sauravdhakal.com.np/tags/nestjs/><link crossorigin=anonymous href=/assets/css/stylesheet.1819d1b52fd9f2af4d88316fde3f9b918c48d08dac9a2e1ef0a7ca49d1f18ddb.css integrity="sha256-GBnRtS/Z8q9NiDFv3j+bkYxI0I2smi4e8KfKSdHxjds=" rel="preload stylesheet" as=style><link rel=icon href=https://sauravdhakal.com.np/%3Clink%20/%20abs%20url%3E><link rel=icon type=image/png sizes=16x16 href=https://sauravdhakal.com.np/%3Clink%20/%20abs%20url%3E><link rel=icon type=image/png sizes=32x32 href=https://sauravdhakal.com.np/%3Clink%20/%20abs%20url%3E><link rel=apple-touch-icon href=https://sauravdhakal.com.np/%3Clink%20/%20abs%20url%3E><link rel=mask-icon href=https://sauravdhakal.com.np/%3Clink%20/%20abs%20url%3E><meta name=theme-color content="#2e2e33"><meta name=msapplication-TileColor content="#2e2e33"><link rel=alternate type=application/rss+xml href=https://sauravdhakal.com.np/tags/nestjs/index.xml title=rss><link rel=alternate hreflang=en href=https://sauravdhakal.com.np/tags/nestjs/><noscript><style>#theme-toggle,.top-link{display:none}</style></noscript><script async src="https://www.googletagmanager.com/gtag/js?id=G-V0CXG8ZEG2"></script><script>var dnt,doNotTrack=!1;if(!1&&(dnt=navigator.doNotTrack||window.doNotTrack||navigator.msDoNotTrack,doNotTrack=dnt=="1"||dnt=="yes"),!doNotTrack){window.dataLayer=window.dataLayer||[];function gtag(){dataLayer.push(arguments)}gtag("js",new Date),gtag("config","G-V0CXG8ZEG2")}</script><meta property="og:url" content="https://sauravdhakal.com.np/tags/nestjs/"><meta property="og:site_name" content="Saurav Dhakal"><meta property="og:title" content="Nestjs"><meta property="og:description" content="A personal blog"><meta property="og:locale" content="en-us"><meta property="og:type" content="website"><meta name=twitter:card content="summary"><meta name=twitter:title content="Nestjs"><meta name=twitter:description content="A personal blog"></head><body class=list id=top><header class=header><nav class=nav><div class=logo><a href=https://sauravdhakal.com.np/ accesskey=h title="SauravDhakal (Alt + H)">SauravDhakal</a><div class=logo-switches></div></div><ul id=menu><li><a href=https://sauravdhakal.com.np/posts/ title=posts><span>posts</span></a></li><li><a href=https://sauravdhakal.com.np/tags/ title=tags><span>tags</span></a></li></ul></nav></header><main class=main><header class=page-header><div class=breadcrumbs><a href=https://sauravdhakal.com.np/>Home</a> » <a href=https://sauravdhakal.com.np/tags/>Tags</a></div><h1>Nestjs
|
|
||||||
<a href=/tags/nestjs/index.xml title=RSS aria-label=RSS><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" height="23"><path d="M4 11a9 9 0 019 9"/><path d="M4 4a16 16 0 0116 16"/><circle cx="5" cy="19" r="1"/></svg></a></h1></header><article class="post-entry tag-entry"><header class=entry-header><h2 class=entry-hint-parent>Understanding Separation of Concerns (SoC) in NestJS</h2></header><div class=entry-content><p>A guide to understanding Separation of Concerns in NestJS using modules, services, and controllers.</p></div><footer class=entry-footer><span title='2025-08-19 00:00:00 +0000 UTC'>August 19, 2025</span> · <span>4 min</span> · <span>767 words</span> · <span>Saurav Dhakal</span></footer><a class=entry-link aria-label="post link to Understanding Separation of Concerns (SoC) in NestJS" href=https://sauravdhakal.com.np/posts/seperation-of-concern-in-nextjs/></a></article></main><footer class=footer><span>Copyright © 2026 SauravDhakal</span></footer><a href=#top aria-label="go to top" title="Go to Top (Alt + G)" class=top-link id=top-link accesskey=g><svg viewBox="0 0 12 6" fill="currentColor"><path d="M12 6H0l6-6z"/></svg>
|
|
||||||
</a><script>let menu=document.getElementById("menu");if(menu){const e=localStorage.getItem("menu-scroll-position");e&&(menu.scrollLeft=parseInt(e,10)),menu.onscroll=function(){localStorage.setItem("menu-scroll-position",menu.scrollLeft)}}document.querySelectorAll('a[href^="#"]').forEach(e=>{e.addEventListener("click",function(e){e.preventDefault();var t=this.getAttribute("href").substr(1);window.matchMedia("(prefers-reduced-motion: reduce)").matches?document.querySelector(`[id='${decodeURIComponent(t)}']`).scrollIntoView():document.querySelector(`[id='${decodeURIComponent(t)}']`).scrollIntoView({behavior:"smooth"}),t==="top"?history.replaceState(null,null," "):history.pushState(null,null,`#${t}`)})})</script><script>var mybutton=document.getElementById("top-link");window.onscroll=function(){document.body.scrollTop>800||document.documentElement.scrollTop>800?(mybutton.style.visibility="visible",mybutton.style.opacity="1"):(mybutton.style.visibility="hidden",mybutton.style.opacity="0")}</script></body></html>
|
|
||||||
@@ -1,20 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
|
|
||||||
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/">
|
|
||||||
<channel>
|
|
||||||
<title>Nestjs on Saurav Dhakal</title>
|
|
||||||
<link>https://sauravdhakal.com.np/tags/nestjs/</link>
|
|
||||||
<description>Recent content in Nestjs on Saurav Dhakal</description>
|
|
||||||
<generator>Hugo -- 0.152.2</generator>
|
|
||||||
<language>en-us</language>
|
|
||||||
<copyright>SauravDhakal</copyright>
|
|
||||||
<lastBuildDate>Tue, 19 Aug 2025 00:00:00 +0000</lastBuildDate>
|
|
||||||
<atom:link href="https://sauravdhakal.com.np/tags/nestjs/index.xml" rel="self" type="application/rss+xml" />
|
|
||||||
<item>
|
|
||||||
<title>Understanding Separation of Concerns (SoC) in NestJS</title>
|
|
||||||
<link>https://sauravdhakal.com.np/posts/seperation-of-concern-in-nextjs/</link>
|
|
||||||
<pubDate>Tue, 19 Aug 2025 00:00:00 +0000</pubDate>
|
|
||||||
<guid>https://sauravdhakal.com.np/posts/seperation-of-concern-in-nextjs/</guid>
|
|
||||||
<description>A guide to understanding Separation of Concerns in NestJS using modules, services, and controllers.</description>
|
|
||||||
</item>
|
|
||||||
</channel>
|
|
||||||
</rss>
|
|
||||||
@@ -1 +0,0 @@
|
|||||||
<!doctype html><html lang=en-us><head><title>https://sauravdhakal.com.np/tags/nestjs/</title><link rel=canonical href=https://sauravdhakal.com.np/tags/nestjs/><meta charset=utf-8><meta http-equiv=refresh content="0; url=https://sauravdhakal.com.np/tags/nestjs/"></head></html>
|
|
||||||
@@ -1,3 +0,0 @@
|
|||||||
<!doctype html><html lang=en dir=auto data-theme=dark><head><meta charset=utf-8><meta http-equiv=X-UA-Compatible content="IE=edge"><meta name=viewport content="width=device-width,initial-scale=1,shrink-to-fit=no"><meta name=robots content="index, follow"><title>Typescript | Saurav Dhakal</title><meta name=keywords content><meta name=description content="A personal blog"><meta name=author content="saurav"><link rel=canonical href=https://sauravdhakal.com.np/tags/typescript/><link crossorigin=anonymous href=/assets/css/stylesheet.1819d1b52fd9f2af4d88316fde3f9b918c48d08dac9a2e1ef0a7ca49d1f18ddb.css integrity="sha256-GBnRtS/Z8q9NiDFv3j+bkYxI0I2smi4e8KfKSdHxjds=" rel="preload stylesheet" as=style><link rel=icon href=https://sauravdhakal.com.np/%3Clink%20/%20abs%20url%3E><link rel=icon type=image/png sizes=16x16 href=https://sauravdhakal.com.np/%3Clink%20/%20abs%20url%3E><link rel=icon type=image/png sizes=32x32 href=https://sauravdhakal.com.np/%3Clink%20/%20abs%20url%3E><link rel=apple-touch-icon href=https://sauravdhakal.com.np/%3Clink%20/%20abs%20url%3E><link rel=mask-icon href=https://sauravdhakal.com.np/%3Clink%20/%20abs%20url%3E><meta name=theme-color content="#2e2e33"><meta name=msapplication-TileColor content="#2e2e33"><link rel=alternate type=application/rss+xml href=https://sauravdhakal.com.np/tags/typescript/index.xml title=rss><link rel=alternate hreflang=en href=https://sauravdhakal.com.np/tags/typescript/><noscript><style>#theme-toggle,.top-link{display:none}</style></noscript><script async src="https://www.googletagmanager.com/gtag/js?id=G-V0CXG8ZEG2"></script><script>var dnt,doNotTrack=!1;if(!1&&(dnt=navigator.doNotTrack||window.doNotTrack||navigator.msDoNotTrack,doNotTrack=dnt=="1"||dnt=="yes"),!doNotTrack){window.dataLayer=window.dataLayer||[];function gtag(){dataLayer.push(arguments)}gtag("js",new Date),gtag("config","G-V0CXG8ZEG2")}</script><meta property="og:url" content="https://sauravdhakal.com.np/tags/typescript/"><meta property="og:site_name" content="Saurav Dhakal"><meta property="og:title" content="Typescript"><meta property="og:description" content="A personal blog"><meta property="og:locale" content="en-us"><meta property="og:type" content="website"><meta name=twitter:card content="summary"><meta name=twitter:title content="Typescript"><meta name=twitter:description content="A personal blog"></head><body class=list id=top><header class=header><nav class=nav><div class=logo><a href=https://sauravdhakal.com.np/ accesskey=h title="SauravDhakal (Alt + H)">SauravDhakal</a><div class=logo-switches></div></div><ul id=menu><li><a href=https://sauravdhakal.com.np/posts/ title=posts><span>posts</span></a></li><li><a href=https://sauravdhakal.com.np/tags/ title=tags><span>tags</span></a></li></ul></nav></header><main class=main><header class=page-header><div class=breadcrumbs><a href=https://sauravdhakal.com.np/>Home</a> » <a href=https://sauravdhakal.com.np/tags/>Tags</a></div><h1>Typescript
|
|
||||||
<a href=/tags/typescript/index.xml title=RSS aria-label=RSS><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" height="23"><path d="M4 11a9 9 0 019 9"/><path d="M4 4a16 16 0 0116 16"/><circle cx="5" cy="19" r="1"/></svg></a></h1></header><article class="post-entry tag-entry"><header class=entry-header><h2 class=entry-hint-parent>Understanding Separation of Concerns (SoC) in NestJS</h2></header><div class=entry-content><p>A guide to understanding Separation of Concerns in NestJS using modules, services, and controllers.</p></div><footer class=entry-footer><span title='2025-08-19 00:00:00 +0000 UTC'>August 19, 2025</span> · <span>4 min</span> · <span>767 words</span> · <span>Saurav Dhakal</span></footer><a class=entry-link aria-label="post link to Understanding Separation of Concerns (SoC) in NestJS" href=https://sauravdhakal.com.np/posts/seperation-of-concern-in-nextjs/></a></article></main><footer class=footer><span>Copyright © 2026 SauravDhakal</span></footer><a href=#top aria-label="go to top" title="Go to Top (Alt + G)" class=top-link id=top-link accesskey=g><svg viewBox="0 0 12 6" fill="currentColor"><path d="M12 6H0l6-6z"/></svg>
|
|
||||||
</a><script>let menu=document.getElementById("menu");if(menu){const e=localStorage.getItem("menu-scroll-position");e&&(menu.scrollLeft=parseInt(e,10)),menu.onscroll=function(){localStorage.setItem("menu-scroll-position",menu.scrollLeft)}}document.querySelectorAll('a[href^="#"]').forEach(e=>{e.addEventListener("click",function(e){e.preventDefault();var t=this.getAttribute("href").substr(1);window.matchMedia("(prefers-reduced-motion: reduce)").matches?document.querySelector(`[id='${decodeURIComponent(t)}']`).scrollIntoView():document.querySelector(`[id='${decodeURIComponent(t)}']`).scrollIntoView({behavior:"smooth"}),t==="top"?history.replaceState(null,null," "):history.pushState(null,null,`#${t}`)})})</script><script>var mybutton=document.getElementById("top-link");window.onscroll=function(){document.body.scrollTop>800||document.documentElement.scrollTop>800?(mybutton.style.visibility="visible",mybutton.style.opacity="1"):(mybutton.style.visibility="hidden",mybutton.style.opacity="0")}</script></body></html>
|
|
||||||
@@ -1,20 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
|
|
||||||
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/">
|
|
||||||
<channel>
|
|
||||||
<title>Typescript on Saurav Dhakal</title>
|
|
||||||
<link>https://sauravdhakal.com.np/tags/typescript/</link>
|
|
||||||
<description>Recent content in Typescript on Saurav Dhakal</description>
|
|
||||||
<generator>Hugo -- 0.152.2</generator>
|
|
||||||
<language>en-us</language>
|
|
||||||
<copyright>SauravDhakal</copyright>
|
|
||||||
<lastBuildDate>Tue, 19 Aug 2025 00:00:00 +0000</lastBuildDate>
|
|
||||||
<atom:link href="https://sauravdhakal.com.np/tags/typescript/index.xml" rel="self" type="application/rss+xml" />
|
|
||||||
<item>
|
|
||||||
<title>Understanding Separation of Concerns (SoC) in NestJS</title>
|
|
||||||
<link>https://sauravdhakal.com.np/posts/seperation-of-concern-in-nextjs/</link>
|
|
||||||
<pubDate>Tue, 19 Aug 2025 00:00:00 +0000</pubDate>
|
|
||||||
<guid>https://sauravdhakal.com.np/posts/seperation-of-concern-in-nextjs/</guid>
|
|
||||||
<description>A guide to understanding Separation of Concerns in NestJS using modules, services, and controllers.</description>
|
|
||||||
</item>
|
|
||||||
</channel>
|
|
||||||
</rss>
|
|
||||||
@@ -1 +0,0 @@
|
|||||||
<!doctype html><html lang=en-us><head><title>https://sauravdhakal.com.np/tags/typescript/</title><link rel=canonical href=https://sauravdhakal.com.np/tags/typescript/><meta charset=utf-8><meta http-equiv=refresh content="0; url=https://sauravdhakal.com.np/tags/typescript/"></head></html>
|
|
||||||
Reference in New Issue
Block a user