Modern Intranet Platform: SharePoint, Viva, Teams, and Power Platform Integration

Modern Intranet Platform: SharePoint, Viva, Teams, and Power Platform Integration

Introduction

Modern intranets transcend traditional document repositories—they're engagement platforms combining content, communication, and productivity tools. This deep dive demonstrates building a comprehensive intranet leveraging SharePoint hub sites, Viva Connections, Teams collaboration, and Power Platform automation.

Solution Architecture

flowchart TB USERS[Employees] --> VIVA[Viva Connections Dashboard] USERS --> TEAMS[Microsoft Teams] USERS --> SHAREPOINT[SharePoint Home] VIVA --> HUB[SharePoint Hub Sites] TEAMS --> HUB SHAREPOINT --> HUB subgraph "Hub Structure" HUB --> NEWS[News & Announcements] HUB --> HR[HR Portal] HUB --> IT[IT Services] HUB --> DEPT[Departmental Sites] end NEWS --> POWERAPPS[Power Apps Widgets] HR --> POWERAUTOMATE[Power Automate Workflows] IT --> FORMS[Microsoft Forms] POWERAPPS --> DATAVERSE[(Dataverse)] POWERAUTOMATE --> GRAPH[Microsoft Graph API] HUB --> SEARCH[Microsoft Search] SEARCH --> AI[AI-Powered Results]

Components Overview

Component Role Key Features
SharePoint Hub Sites Content organization Cross-site navigation, shared branding
Viva Connections Employee dashboard Personalized feed, quick links, cards
Microsoft Teams Collaboration hub Channels, meetings, chat integration
Power Apps Custom widgets Forms, dashboards, line-of-business apps
Power Automate Workflow automation Approvals, notifications, data sync
Microsoft Search Discovery AI-powered, personalized search results

Implementation Guide

Phase 1: Hub Site Architecture

Create Corporate Hub:

Connect-PnPOnline -Url "https://contoso.sharepoint.com/sites/intranet" -Interactive

# Register as hub site
Register-PnPHubSite -Site "https://contoso.sharepoint.com/sites/intranet"

# Associate child sites
Add-PnPHubSiteAssociation -Site "https://contoso.sharepoint.com/sites/hr" -HubSite "https://contoso.sharepoint.com/sites/intranet"
Add-PnPHubSiteAssociation -Site "https://contoso.sharepoint.com/sites/it" -HubSite "https://contoso.sharepoint.com/sites/intranet"
Add-PnPHubSiteAssociation -Site "https://contoso.sharepoint.com/sites/engineering" -HubSite "https://contoso.sharepoint.com/sites/intranet"

Configure Hub Navigation:

$nav = @(
    @{Title="Home"; Url="https://contoso.sharepoint.com/sites/intranet"},
    @{Title="News"; Url="https://contoso.sharepoint.com/sites/intranet/SitePages/News.aspx"},
    @{Title="HR Portal"; Url="https://contoso.sharepoint.com/sites/hr"},
    @{Title="IT Services"; Url="https://contoso.sharepoint.com/sites/it"},
    @{Title="Departments"; Url=""; IsParentLabels=$true}
)

foreach ($item in $nav) {
    Add-PnPNavigationNode -Title $item.Title -Url $item.Url -Location TopNavigationBar -External
}

Phase 2: SharePoint Home Page Design

Modern Page Layout:

{
  "layout": {
    "sections": [
      {
        "type": "hero",
        "height": "medium",
        "items": [
          {
            "title": "Welcome to Contoso Intranet",
            "description": "Your hub for news, resources, and collaboration",
            "imageUrl": "/sites/intranet/Assets/hero-banner.jpg",
            "linkUrl": "/sites/intranet"
          }
        ]
      },
      {
        "type": "twoColumn",
        "webparts": [
          {
            "type": "news",
            "properties": {
              "layout": "carousel",
              "newsDataLocation": "hubSites",
              "maxItems": 5
            }
          },
          {
            "type": "quickLinks",
            "properties": {
              "items": [
                {"title": "Time Off Request", "url": "/sites/hr/timeof"},
                {"title": "IT Help Desk", "url": "/sites/it/helpdesk"},
                {"title": "Employee Directory", "url": "/sites/intranet/directory"}
              ]
            }
          }
        ]
      },
      {
        "type": "fullWidth",
        "webparts": [
          {
            "type": "events",
            "properties": {
              "layout": "filmstrip",
              "dateRange": "upcoming",
              "maxEvents": 8
            }
          }
        ]
      }
    ]
  }
}

PowerShell: Deploy Page Template:

$page = Add-PnPPage -Name "Home" -LayoutType Article -Publish

Add-PnPPageSection -Page $page -SectionTemplate OneColumn
Add-PnPPageWebPart -Page $page -Component "News" -Section 1 -Column 1 -Order 1

Add-PnPPageSection -Page $page -SectionTemplate TwoColumn
Add-PnPPageWebPart -Page $page -Component "QuickLinks" -Section 2 -Column 1 -Order 1
Add-PnPPageWebPart -Page $page -Component "Events" -Section 2 -Column 2 -Order 1

Phase 3: Viva Connections Dashboard

Configure Dashboard Cards:

{
  "cards": [
    {
      "id": "time-off-card",
      "title": "Time Off Balance",
      "description": "View your PTO balance",
      "icon": "Calendar",
      "action": {
        "type": "quickView",
        "parameters": {
          "view": "timeOffView"
        }
      }
    },
    {
      "id": "helpdesk-card",
      "title": "IT Support",
      "description": "Submit a ticket",
      "icon": "Help",
      "action": {
        "type": "url",
        "parameters": {
          "url": "https://contoso.sharepoint.com/sites/it/helpdesk"
        }
      }
    },
    {
      "id": "announcements-card",
      "title": "Company News",
      "description": "Latest updates",
      "icon": "News",
      "action": {
        "type": "adaptiveCard",
        "parameters": {
          "view": "newsView"
        }
      }
    }
  ]
}

Adaptive Card Template (News):

{
  "type": "AdaptiveCard",
  "version": "1.4",
  "body": [
    {
      "type": "TextBlock",
      "text": "${title}",
      "size": "large",
      "weight": "bolder"
    },
    {
      "type": "Image",
      "url": "${thumbnailUrl}",
      "size": "stretch"
    },
    {
      "type": "TextBlock",
      "text": "${description}",
      "wrap": true
    }
  ],
  "actions": [
    {
      "type": "Action.OpenUrl",
      "title": "Read More",
      "url": "${linkUrl}"
    }
  ]
}

Phase 4: Power Apps Integration

Embedded Canvas App (Employee Directory):

// Gallery Items
Filter(
    Office365Users.SearchUser({searchTerm: SearchBox.Text}),
    !IsBlank(Mail)
)

// User Card OnSelect
Launch(
    "https://teams.microsoft.com/l/chat/0/0?users=" & ThisItem.Mail
)

// Organization Chart
ClearCollect(
    colOrgChart,
    AddColumns(
        Office365Users.DirectReports(User().Email).value,
        "Level", 1,
        "Manager", User().DisplayName
    )
)

SPFx Web Part Wrapper:

export default class EmployeeDirectoryWebPart extends BaseClientSideWebPart<IEmployeeDirectoryWebPartProps> {
  public render(): void {
    this.domElement.innerHTML = `
      <div class="${styles.employeeDirectory}">
        <iframe 
          src="https://apps.powerapps.com/play/e/default-${tenantId}/a/${appId}?source=iframe"
          frameborder="0"
          width="100%"
          height="600px">
        </iframe>
      </div>
    `;
  }
}

Phase 5: Power Automate Workflows

Workflow 1: New Hire Onboarding

Trigger: When a new user is added to "New Employees" group
Actions:
  1. Create personal SharePoint site
  2. Provision Teams channel in "Onboarding" team
  3. Assign training courses (Learning Pathways)
  4. Send welcome email with resource links
  5. Create task list in Planner
  6. Notify IT for equipment setup
  7. Schedule 30/60/90 day check-in reminders

Flow Implementation:

{
  "trigger": {
    "type": "When_a_new_group_member_is_added",
    "inputs": {
      "groupId": "new-employees-group-id"
    }
  },
  "actions": {
    "Create_SharePoint_Site": {
      "type": "Http",
      "inputs": {
        "method": "POST",
        "uri": "https://graph.microsoft.com/v1.0/sites/root/sites",
        "body": {
          "displayName": "@{triggerBody()?['displayName']}'s Site",
          "name": "@{toLower(triggerBody()?['mail'])}",
          "siteCollection": {
            "root": {}
          }
        }
      }
    },
    "Create_Teams_Channel": {
      "type": "Microsoft.Teams/CreateChannel",
      "inputs": {
        "teamId": "onboarding-team-id",
        "displayName": "@{triggerBody()?['displayName']} Onboarding",
        "description": "Onboarding channel for new hire"
      }
    },
    "Send_Welcome_Email": {
      "type": "Office365.SendEmailV2",
      "inputs": {
        "To": "@{triggerBody()?['mail']}",
        "Subject": "Welcome to Contoso!",
        "Body": "<html>Welcome message with links to intranet resources</html>"
      }
    }
  }
}

Workflow 2: Document Approval Process

Trigger: When a file is created or modified in "Policy Documents" library
Condition: Document status = "Pending Review"
Actions:
  1. Start approval (Legal, HR, Executive)
  2. If approved → Update status to "Approved", publish to intranet
  3. If rejected → Update status to "Needs Revision", notify author
  4. Log approval history in Dataverse

Phase 6: Microsoft Search Configuration

Bookmark for Quick Access:

New-MgSearchBookmark -DisplayName "Time Off Request" -WebUrl "https://contoso.sharepoint.com/sites/hr/timeoff" -Description "Submit PTO request" -Keywords @("time off", "vacation", "PTO", "leave")

New-MgSearchBookmark -DisplayName "IT Help Desk" -WebUrl "https://contoso.sharepoint.com/sites/it/helpdesk" -Description "Get IT support" -Keywords @("help", "support", "IT", "ticket", "password reset")

Custom Search Vertical:

{
  "name": "Policies",
  "displayName": "Policies & Procedures",
  "queryTemplate": "ContentTypeId:0x010100C568DB52D9D0A14D9B2FDCC96666E9F2* AND Path:https://contoso.sharepoint.com/sites/intranet/policies",
  "refiners": [
    "Department",
    "PolicyType",
    "LastModifiedTime"
  ]
}

Phase 7: Teams Integration

Tab Configuration for Intranet:

{
  "name": "Intranet Home",
  "contentUrl": "https://contoso.sharepoint.com/sites/intranet/_layouts/15/teamslogon.aspx?SPFX=true&dest=/sites/intranet",
  "websiteUrl": "https://contoso.sharepoint.com/sites/intranet",
  "removeUrl": ""
}

Bot for Quick Actions:

protected override async Task OnMessageActivityAsync(ITurnContext<IMessageActivity> turnContext, CancellationToken cancellationToken)
{
    var text = turnContext.Activity.Text.ToLowerInvariant();
    
    if (text.Contains("time off"))
    {
        var card = new HeroCard
        {
            Title = "Time Off Request",
            Text = "Would you like to submit a new request?",
            Buttons = new List<CardAction>
            {
                new CardAction(ActionTypes.OpenUrl, "Submit Request", value: "https://contoso.sharepoint.com/sites/hr/timeoff")
            }
        };
        
        await turnContext.SendActivityAsync(MessageFactory.Attachment(card.ToAttachment()), cancellationToken);
    }
}

Advanced Features

Feature 1: Personalized Content with Audience Targeting

# Configure audience targeting on library
$list = Get-PnPList -Identity "Announcements"
Set-PnPList -Identity $list -EnableAudienceTargeting $true

# Set audience on list item
$item = Get-PnPListItem -List "Announcements" -Id 5
Set-PnPListItem -List "Announcements" -Identity $item -Values @{"Audiences"="Engineering Department"}

Feature 2: Yammer Integration

<!-- Embed Yammer Feed -->
<div id="yammer-feed"></div>
<script type="text/javascript" src="https://c64.assets-yammer.com/assets/platform_embed.js"></script>
<script>
  yam.connect.embedFeed({
    container: '#yammer-feed',
    network: 'contoso.com',
    feedType: 'group',
    feedId: '12345'
  });
</script>

Feature 3: Analytics Dashboard

// SharePoint Analytics (Log Analytics)
SharePointAuditLogs
| where TimeGenerated > ago(30d)
| where Operation == "FileAccessed"
| summarize PageViews = count() by SiteUrl, PageUrl
| top 10 by PageViews desc
| render barchart

// Viva Connections Engagement
VivaConnectionsAnalytics
| where TimeGenerated > ago(7d)
| summarize CardClicks = count() by CardId, CardTitle
| order by CardClicks desc

Governance & Security

Information Architecture:

  • Corporate Hub (Public)
    • News & Announcements (Public)
    • HR Portal (Authenticated users)
      • Benefits (All employees)
      • Compensation (Private, view own data)
    • IT Services (Public)
    • Departmental Sites (Department members)

DLP Policy:

New-DlpCompliancePolicy -Name "Intranet DLP" -SharePointLocation All

New-DlpComplianceRule -Policy "Intranet DLP" -Name "Block SSN Sharing" -ContentContainsSensitiveInformation @{Name="U.S. Social Security Number (SSN)"; minCount=1} -BlockAccess $true

User Adoption Strategy

Phase Activity Duration
Awareness Teaser emails, executive announcements 2 weeks
Training Live demos, video tutorials, quick reference guides 3 weeks
Launch Go-live event, champions network activation 1 day
Support Help desk, feedback surveys, office hours Ongoing

Monitoring & Optimization

Key Metrics:

// Monthly Active Users
SharePointAuditLogs
| where TimeGenerated > startofmonth(now())
| where SiteUrl contains "intranet"
| summarize MAU = dcount(UserId)

// Content Engagement
| extend ContentType = case(
    Operation == "FileAccessed", "Document",
    Operation == "PageViewed", "Page",
    Operation == "ListItemViewed", "List Item",
    "Other"
)
| summarize Interactions = count() by ContentType
| render piechart

Troubleshooting

Issue: Hub navigation not appearing on associated sites
Solution: Verify hub association; clear browser cache; check permissions

Issue: Viva Connections cards not loading
Solution: Verify Adaptive Card schema version; check API permissions; test in Adaptive Card Designer

Issue: Power Apps not loading in SharePoint
Solution: Enable iframes in browser; check app permissions; verify SPFx web part deployment

Best Practices

  • Use hub sites for scalable information architecture
  • Implement audience targeting for personalized content
  • Enable Microsoft Search bookmarks for quick access
  • Create consistent branding with hub site themes
  • Monitor analytics to optimize content strategy
  • Establish governance policies upfront
  • Train and empower site owners
  • Regularly review and archive outdated content

Key Takeaways

  • Modern intranets combine SharePoint, Viva, Teams, and Power Platform.
  • Hub sites provide scalable navigation across site collections.
  • Viva Connections delivers personalized employee dashboards.
  • Power Automate enables intelligent workflow automation.
  • Microsoft Search makes content discoverable with AI.

Next Steps

  • Implement Viva Topics for knowledge management
  • Explore Viva Engage (Yammer) for community building
  • Add Viva Learning for integrated training
  • Deploy SharePoint Syntex for content intelligence

Additional Resources


Ready to transform your intranet into an engagement platform?