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
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?